MLP与keras进行预测

时间:2017-07-30 16:58:16

标签: python machine-learning keras

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

我想对没有的Testset做预测。

这是我的代码:

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

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

2 个答案:

答案 0 :(得分:2)

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

看看scikit-learn的StandardScaler

并查看into this SO thread了解如何正确fit_transform您的训练数据,并且只能transform您的测试数据。

本教程还使用了scikit-learn的数据预处理管道:http://machinelearningmastery.com/regression-tutorial-keras-deep-learning-library-python/

答案 1 :(得分:0)

如果输入变量的比例彼此太大,神经网络就会很艰难。将10,1000,100000作为相同的输入会导致梯度向大的值倾斜。其他值实际上不提供任何信息。

一种方法是简单地用常量重新缩放输入变量。您可以简单地将206000除以100000.尝试将所有变量设置为大约相同的位数。对于网络而言,大数字比小数字更难。