Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用Keras回归器得到非常糟糕的预测_Python_Machine Learning_Keras_Neural Network - Fatal编程技术网

Python 使用Keras回归器得到非常糟糕的预测

Python 使用Keras回归器得到非常糟糕的预测,python,machine-learning,keras,neural-network,Python,Machine Learning,Keras,Neural Network,我在一个虚拟数据集上使用了KerasRegressor,并试图预测训练值本身。这给了我一个远远不能令人满意的结果。训练数据完全不是随机的。有人能帮我吗 从keras.models导入 从keras.layers导入稠密 从keras.wrappers.scikit_了解导入keras回归器 将numpy作为ny导入 X=ny.数组([[1,2],[3,4],[5,6],[7,8],[9,10]) Y=ny.array([3,4,5,6,7]) N=5 def brain(): #创造大脑 br_

我在一个虚拟数据集上使用了KerasRegressor,并试图预测训练值本身。这给了我一个远远不能令人满意的结果。训练数据完全不是随机的。有人能帮我吗

从keras.models导入
从keras.layers导入稠密
从keras.wrappers.scikit_了解导入keras回归器
将numpy作为ny导入
X=ny.数组([[1,2],[3,4],[5,6],[7,8],[9,10])
Y=ny.array([3,4,5,6,7])
N=5
def brain():
#创造大脑
br_模型=顺序()
br_model.add(密集型(3,输入尺寸=2,内核初始化器='normal',激活='relu'))
br_model.add(稠密(2,内核初始化器='normal',激活='relu'))
br_model.add(稠密(1,kernel_initializer='normal'))
#编辑大脑
br_model.compile(loss='mean_squared_error',optimizer='adam')
返回br_模型
估计器=Keras回归器(构建=brain,nb\U历元=1000000,批量=5,详细=1)
打印“完成”
估计拟合(X,Y)
预测=估计器。预测(X)
打印Y
打印预测
输出是

[3 4 5 6 7]
[0.001 0.001 0.001 0.001 0.001]
基本上,预测值为0.001,而实际值为0.001。 我尝试过其他网络配置,但我面临同样的问题。
要获得准确的输出,我必须做/不做什么???

这是因为新从业者犯了一个典型错误,即在将数据输入到神经网络之前没有对其进行标准化(有关在卷积神经网络的分类设置中导致类似问题的相同问题,请参见中的第三点)

(我承认,在我看到的大多数教程中,这一关键点通常没有得到足够的强调;甚至可能更糟,例如,在Tensorflow教程中,Tensorflow提供的实用函数返回的数据已经在[0,1]中标准化了。),对用户透明且不提供任何提示,因此对读者隐藏了一个关键步骤,这在以后使用自己的数据时肯定需要完成)

因此,您需要规范化您的特征和输出;保持显示的
X
Y
数据:

#功能缩放(忽略因整数转换为浮点数而可能出现的警告)
从sklearn.preprocessing导入StandardScaler
sc_X=StandardScaler()
X_序列=sc_X.拟合变换(X)
sc_Y=StandardScaler()
Y_序列=sc_Y.拟合变换(Y)
然后,将您的历元更改为仅1000个(这些数据绝对不需要100万个历元!),并对缩放数据进行拟合:

estimator=KerasRegressor(build\u fn=brain,epochs=1000,batch\u size=5,verbose=1)
估计值拟合(X_序列,Y_序列)
您将获得:

prediction=估计器预测(X_序列)
打印(Y_列)
打印(预测)
# [-1.41421356 -0.70710678  0.          0.70710678  1.41421356]
# [-1.01221371 -1.01221371 -0.08764046  0.69051325  1.42577887]
或者,使用以下工具将输出缩放回其原始范围:

打印(Y)
打印(sc_Y.逆变换(预测))
# [3 4 5 6 7]
# [ 3.56851363  3.56851363  4.87605762  5.97653294  7.01635551]

您使用哪种版本的keras?你在训练中会受到什么损失?看起来网络根本没有训练。如果您使用的是当前版本的keras,请尝试将
nb_epoch
更改为
epochs
。@sietschie也使用
nb_epoch
进行了测试-它在新的keras版本中被忽略,而使用默认值10。真正的问题是数据规范化,请参阅下面的答案。看起来工作正常。但我有两个疑问:1)为什么每次我运行模型时,预测值都在不断变化(即,如果它采用相同的训练输入,并运行相同的算法,那么它不是每次都给出相同的输出吗?)??2) 如果我把历元数增加到10000,它给出的结果是完全错误的,所有的预测值都是相同的。为什么会这样?(考虑到在线性回归中,你运行的时间越长,它收敛得越好…)@Thanatos一步一个问题。因为这个答案可以说已经解决了您报告的问题,请接受它并打开一个新的问题,包括您的新问题的详细信息,就像您在这里所做的那样。既然你们在这里学到了一些有用且普遍适用的东西,那个么UPVOUTS也很受欢迎。@Thanatos只是作为一个关于开始一个有细节的新问题的额外论点:不清楚你们在(1)中所说的“run”是什么意思;如果你的意思是安装一个新的模型,这并不奇怪(至少在原则上);如果你的意思是运行相同的安装模型,那么这真的很奇怪(但我怀疑情况并非如此)…你可以看看。我在另一篇文章中问过这个问题。谢谢你的帮助。这真的很有价值,因为我没有太多的时间来启动这个模型。您确定数据必须仅进行缩放而不进行标准化吗?这两件事是不同的:缩放产生了一个期望值和单位标准偏差为零的分布,归一化使向量标准化为单位范数(链接到的答案是后者,而不是前者)。