gpt4 book ai didi

python - 使用 KerasRegressor 得到非常糟糕的预测

转载 作者:行者123 更新时间:2023-11-30 09:07:26 24 4
gpt4 key购买 nike

我在虚拟数据集上使用 KerasRegressor 并尝试预测训练值本身。它给我的输出远不能令人满意。训练数据根本不是随机的。有人可以帮我吗?

from keras.models import Sequential
from keras.layers import Dense
from keras.wrappers.scikit_learn import KerasRegressor

import numpy as ny

X = ny.array([[1,2], [3,4], [5,6], [7,8], [9,10]])
Y = ny.array([3, 4, 5, 6, 7])
N = 5

def brain():
#Create the brain
br_model=Sequential()
br_model.add(Dense(3, input_dim=2, kernel_initializer='normal',activation='relu'))
br_model.add(Dense(2, kernel_initializer='normal',activation='relu'))
br_model.add(Dense(1,kernel_initializer='normal'))

#Compile the brain
br_model.compile(loss='mean_squared_error',optimizer='adam')
return br_model


estimator = KerasRegressor(build_fn=brain, nb_epoch=1000000, batch_size=5,verbose=1)
print "Done"


estimator.fit(X,Y)
prediction = estimator.predict(X)

print Y
print prediction

输出为

[3 4 5 6 7]
[0.001 0.001 0.001 0.001 0.001]

基本上,预测值是 0.001,而实际值不是。我尝试过其他网络配置,但遇到了同样的问题。我必须做什么/(不做什么)才能获得准确的输出?

最佳答案

这是由于新从业者犯的一个典型错误,即在将数据输入神经网络之前没有对其数据进行标准化(请参阅 this answer 中的第三点,了解导致类似问题的同一问题在使用卷积神经网络的分类设置中)。

(我承认,在我见过的大多数教程中,这个关键点通常都没有得到足够的重视;而且情况可能更糟,例如在 Tensorflow MNIST For ML Beginners 教程中,事实证明, Tensorflow 提供的实用函数已经在 [0, 1] 中标准化,对用户透明且没有提供任何提示,因此向读者隐藏了一个关键步骤,在使用自己的数据时肯定需要稍后完成)。

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

# Feature Scaling (ignore possible warnings due to conversion of integers to floats)
from sklearn.preprocessing import StandardScaler

sc_X = StandardScaler()
X_train = sc_X.fit_transform(X)

sc_Y = StandardScaler()
Y_train = sc_Y.fit_transform(Y)

然后,将您的纪元更改为 1000(这些数据绝对不需要 100 万个纪元!),并拟合缩放后的数据:

estimator = KerasRegressor(build_fn=brain, epochs=1000, batch_size=5,verbose=1)
estimator.fit(X_train,Y_train)

您将得到:

prediction = estimator.predict(X_train)

print(Y_train)
print(prediction)
# [-1.41421356 -0.70710678 0. 0.70710678 1.41421356]
# [-1.01221371 -1.01221371 -0.08764046 0.69051325 1.42577887]

或者,使用 inverse_transform 将输出缩放回其原始范围:

print(Y)
print(sc_Y.inverse_transform(prediction))
# [3 4 5 6 7]
# [ 3.56851363 3.56851363 4.87605762 5.97653294 7.01635551]

关于python - 使用 KerasRegressor 得到非常糟糕的预测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48458635/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com