2017-07-30 100 views
1

我尝试创建一个带有keras(backened tensorflow)的神经网络。 我有4个输入和2个输出变量: 不可用MLP与keras预测

我想做一个测试集预测不可用。

这是我的代码:

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] 
... 

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

+0

我不确定,但我想你可以尝试重塑你的Y变量。从https://keras.io/models/model/它说'输出= [b1,b3,b3]'所以我认为输出应该是值的设置,而不是数据的设置。你可以通过转置来做到这一点。 – malioboro

+0

为了确保您注意到它:您已经定义了SGD优化器,但实际上并未使用它:在编译期间使用Adaptative Momentum(Adam)。 – Nathan

+1

谢谢!我在帖子中改变了它。在我原来的脚本中是正确的。你更喜欢哪个优化器? –

回答

2

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

看看scikit-learn的StandardScaler

并看看into this SO thread了解如何正确fit_transform您的培训数据和只有transform您的测试数据。

还有本教程利用了scikit学习的数据预处理流水线:http://machinelearningmastery.com/regression-tutorial-keras-deep-learning-library-python/

+1

感谢您的链接。我已阅读Brownlee博士的许多教程,但没有找到这个教程! –

0

神经网络有一个艰难的时间,如果输入变量的规模是彼此太不一样了。将10,1000,100000作为相同的输入使得梯度向任何大值变小。其他值实际上不提供任何信息。

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

+1

谢谢,它提供了我现在可以使用的信息!我的神经网络的结果不准确,但并不总是像以前一样。 –

+0

乐意帮忙! – Fosa