Tensorflow 什么是最小的Keras回归神经网络模型可以让我完美地拟合汽车数据?

Tensorflow 什么是最小的Keras回归神经网络模型可以让我完美地拟合汽车数据?,tensorflow,keras,regression,Tensorflow,Keras,Regression,我在找。我用这段代码建立并训练了一个回归模型,改编自和。我使用的所有培训数据无培训/测试拆分: import matplotlib.pyplot as plt import numpy as np import pandas as pd from sklearn.model_selection import train_test_split from sklearn.model_selection import cross_val_score from sklearn.model_selecti

我在找。我用这段代码建立并训练了一个回归模型,改编自和。我使用的所有培训数据无培训/测试拆分:

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import KFold
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import MinMaxScaler
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.wrappers.scikit_learn import KerasRegressor
dataset=np.loadtxt("cars.csv", delimiter=",", skiprows=1)
x=dataset[:,0:5]
y=dataset[:,5]
y=np.reshape(y, (-1,1))
scaler_x = MinMaxScaler()
scaler_y = MinMaxScaler()
print(scaler_x.fit(x))
xscale=scaler_x.transform(x)
print(scaler_y.fit(y))
yscale=scaler_y.transform(y)
model = Sequential([
    Dense(2048, activation='relu', input_dim=5),
    Dense(1024, activation='relu'),
    Dense(512, activation='relu'),
    Dense(1)
  ])
model.compile(loss='mse', optimizer='adam', metrics=['mse','mae'])
history = model.fit(xscale, yscale, epochs=1000, batch_size=577,  verbose=1, validation_split=0)
Xnew= scaler_x.transform(Xnew)
ynew= model.predict(Xnew)
ynew = scaler_y.inverse_transform(ynew) 
Znew = scaler_y.inverse_transform(y_train)
plt.figure(figsize=(15,8))
plt.scatter(Znew,ynew);
1000个历次之后,该模型将与输入的训练数据紧密但不完全吻合:

该模型有2635777个可训练参数,数据本身只有5778个数字


就可训练参数总数而言,最小的Keras回归模型是什么?该模型将训练出几乎完美的数据拟合,该数据有5个输入参数、1个输出参数和963个样本。

这里是Michael Grogan-我是该数据和示例的原始作者,希望我能帮助您

您提到您尚未在数据中调用验证拆分。请问有什么原因吗?分为培训和验证的目的是让模型从验证参数中获取反馈,然后相应地更新预测

我已经有一段时间没有看这个例子了,但这里有一个培训/验证分离的例子,培训和验证的损失似乎在20个时代后见底,所以1000不是严格要求的。我编写的原始教程在示例中使用了150个时代

x和y的拆分如下:

x_train, x_val, y_train, y_val = train_test_split(xscale, yscale, random_state=0)
然后,我使用您的配置运行模型:

model = Sequential([
    Dense(2048, activation='relu', input_dim=5),
    Dense(1024, activation='relu'),
    Dense(512, activation='relu'),
    Dense(1)
  ])
model.compile(loss='mse', optimizer='adam', metrics=['mse','mae'])
history = model.fit(x_train, y_train, epochs=20, batch_size=577,  verbose=1, validation_data=(x_val, y_val))
以下是培训和验证损失图:

就可训练参数总数而言,最小的Keras回归模型是什么?该模型将训练出几乎完美的数据拟合,该数据有5个输入参数、1个输出参数和963个样本

当你说最小的Keras回归模型时,你似乎指的是为了达到相同或更好的精度而使用最少特征的模型。一种可以确定这一点的方法是使用特征选择工具,如ExtraTreesClassifier,其中每个特征根据其重要性进行排序,数量越高,越重要

考虑到年龄、性别、里程、债务和收入等特征,结果如下:

In:

from sklearn.ensemble import ExtraTreesClassifier
model = ExtraTreesClassifier()
model.fit(x, y)
print(model.feature_importances_)

Out: [0.23371284 0.01554055 0.23787049 0.25267784 0.26019827]
除性别外,其他特征在重要性方面排名相似

在这方面,让我们再次运行模型,但这次没有性别变量

这是模型唯一的变化是输入_dim=4,这是新的培训和验证损失:

model = Sequential([
    Dense(2048, activation='relu', input_dim=4),
    Dense(1024, activation='relu'),
    Dense(512, activation='relu'),
    Dense(1)
  ])
model.compile(loss='mse', optimizer='adam', metrics=['mse','mae'])
history = model.fit(x_train, y_train, epochs=20, batch_size=577,  verbose=1, validation_data=(x_val, y_val))
示例中的隐藏层看起来相当大,因此让我们尝试将其简化一点:

model = Sequential([
    Dense(12, activation='relu', input_dim=4),
    Dense(8, activation='relu'),
    Dense(1, activation='linear')
  ])
model.compile(loss='mse', optimizer='adam', metrics=['mse','mae'])
history = model.fit(x_train, y_train, epochs=20, batch_size=577,  verbose=1, validation_data=(x_val, y_val))
现在,当模型再次训练时,新的训练和验证损失如下:

model = Sequential([
    Dense(2048, activation='relu', input_dim=4),
    Dense(1024, activation='relu'),
    Dense(512, activation='relu'),
    Dense(1)
  ])
model.compile(loss='mse', optimizer='adam', metrics=['mse','mae'])
history = model.fit(x_train, y_train, epochs=20, batch_size=577,  verbose=1, validation_data=(x_val, y_val))
我们现在看到,获得类似的培训和验证损失大约需要50个纪元,而不是20个纪元。在这方面,似乎在隐藏层的大小和用于训练模型的历元数之间存在折衷

一般来说,该模型需要4个输入参数,并且远远少于1000个历元才能生成良好的拟合

需要注意的是,数据是否完美匹配的真正测试是根据看不见的数据测试预测。例如,我们使用了培训和验证数据来构建模型。这些数据的一部分应该完全分开保存,然后与模型预测进行比较,以确保准确性——这是模型是否真正工作的试金石测试——我建议将此作为下一步,以确保模型的健壮性


希望以上内容能有所帮助。

我正在进行类风湿性关节炎的X射线阅读挑战:。输入为图像,输出为0,1,2,3,4,5等分数。但是,培训数据缺少3,4的示例。所以我需要一个回归模型。我以前从未在神经网络中做过回归。我的问题实际上是关于模型的表达能力。因为我不知道神经网络中的回归,我正在寻找最紧凑/聪明的层结构来进行回归学习。注意:欢迎您加入挑战!听起来很有趣,如果能听到更多,那就太好了。我的联系方式包含在我的个人资料页面中-请随时联系。您可以通过上面的链接在Synapse网站上注册挑战。我不负责挑战,我是一个解决者,但作为一个解决者,我欢迎更多的竞争。目前我认为我们有点陷入困境,因为文档没有给我们足够的培训数据。