对于不同的输入,我得到了相同的预测。我正在尝试使用回归神经网络。我想用神经网络来预测值,而不是用类。由于数据量很大,我每次训练一个例子。下面是我的代码的简化版本。
list_of_files= Path().cwd().glob("**/**/*S1D_A.fits") # create the list of file
model = Sequential()
model.add(Dense(10000, input_dim=212207, kernel_initializer='normal', activation='relu'))
model.add(Dense(100, activation='relu'))
model.add(Dense(1, kernel_initializer='normal'))
model.compile(loss='mean_squared_error', optimizer='adam')
for file_name in list_of_files:
data=fits.getdata(file_name)
X=data.flux
Y=data.rv
#X is one input example with 212207 values/features
#Y is one output value (float)
if i<6000000: #out of 10000000
model.fit(X.transpose(), Y, epochs=30, batch_size=1, verbose=0)
else:
prediction=model.predict(X.transpose())
我确保我在不同的例子上训练,并在不同的例子上尝试预测。对于所有测试输入,我仍然得到相同的预测值。我尝试了一个较小的输入空间,而不是212207进行调试,但这没有帮助。数据集被平衡和洗牌。输入的取值范围为0 ~ 10万。我还没有把它们正常化。输出范围为-30 ~ 0。我想我在定义回归神经网络模型时犯了一些错误。你能检查一下代码是否正确吗?
我认为你的意思是从数据集传递每个记录,而不是整个数据集。现在你预测的数据和你训练的完全一样。
这是你想要执行的:
model = Sequential()
model.add(Dense(10000, input_dim=212207, kernel_initializer='normal', activation='relu'))
model.add(Dense(100, activation='relu'))
model.add(Dense(1, kernel_initializer='normal'))
model.compile(loss='mean_squared_error', optimizer='adam')
X = X.transpose()
# train
model.fit(X[:6000000], Y, epochs=30, batch_size=1, verbose=0)
# test
prediction=model.predict(X[6000000:])