Python 用于预测的带有keras的MLP

Python 用于预测的带有keras的MLP,python,machine-learning,keras,Python,Machine Learning,Keras,我尝试用keras(反向张量流)创建一个神经网络。 我有4个输入变量和2个输出变量: 不可用 我想对不可用的测试集进行预测 这是我的代码: from keras import optimizers from keras.models import Sequential from keras.layers import Dense import numpy numpy.random.seed(7) dataset = numpy.loadtxt("trainingsdata.csv", del

我尝试用keras(反向张量流)创建一个神经网络。 我有4个输入变量和2个输出变量: 不可用

我想对不可用的测试集进行预测

这是我的代码:

from keras import optimizers
from keras.models import Sequential 
from keras.layers import Dense 
import numpy
numpy.random.seed(7)
dataset = numpy.loadtxt("trainingsdata.csv", delimiter=";") 
X = dataset[:,0:4] 
Y = dataset[:,4:6]
model = Sequential() 
model.add(Dense(4, input_dim=4, init='uniform', activation='sigmoid')) 
model.add(Dense(3, init='uniform', activation='sigmoid')) 
model.add(Dense(2, init='uniform', activation='linear'))
sgd = optimizers.SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='mean_squared_error', optimizer='sgd', metrics=['accuracy'])
model.fit(X, Y, epochs=150, batch_size=10, verbose=2) 
testset = numpy.loadtxt("testdata.csv", delimiter=";") 
Z = testset[:,0:4] 
predictions = model.predict(Z) 
print(predictions)
当我运行脚本时,每个历元后的精度为1.000,因此每个输入对的输出总是相同的:

[-5.83297 68.2967] 
[-5.83297 68.2967] 
[-5.83297 68.2967] 
... 

有人知道我的代码中的错误是什么吗?

我建议您在将数据提供给模型之前对数据进行规范化/标准化,然后检查模型是否开始学习

看看scikit learn的

并了解如何正确地
fit_transform
您的训练数据,以及如何仅
transform
您的测试数据


本教程还利用了scikit learn的数据预处理管道:

如果输入变量的规模彼此相差太大,则神经网络将很难使用。将10、1000、100000作为相同的输入会导致渐变向任何较大的值塌陷。其他值实际上不提供任何信息


一种方法是简单地通过常量重新缩放输入变量。您只需将206000除以100000即可。尝试使所有变量的位数大致相同。对于网络来说,大数字比小数字要难一些

我不确定,但我想你可以试着重塑你的Y变量。从中可以看出,
outputs=[b1,b3,b3]
所以我认为输出应该是一组值,而不是一组数据。你可以通过转置它来做到这一点。只是为了确保你注意到了:你定义了你的SGD优化器,但实际上你没有使用它:你在编译过程中使用了Adaptive Momentum(Adam)。谢谢!我在我的帖子里改了。在我的原始脚本中,它是正确的。您更喜欢哪个优化器?谢谢链接。我读过很多布朗利博士的教程,但还没有找到这本!谢谢,它提供了我现在可以使用的信息!!我的神经网络的结果不准确,但并不总是和以前一样。乐于帮忙!