Python Keras机器学习通过线性网络的输入和

Python Keras机器学习通过线性网络的输入和,python,machine-learning,keras,linear-regression,Python,Machine Learning,Keras,Linear Regression,我目前正在和Keras一起做一个项目,我试图确定一个与一组特征值相关的值。但我的网络一直给我带来难以置信的高损失,而且没有改善(我不期望有好的结果,但我期望比平均绝对误差好几个数量级,比我的目标值大)。所以我试着退一步,做一个线性网络,计算特征值之和。这应该是很容易的,因为网络的权重应该很容易达到1 我有两个数组,由输入值和目标值组成(我从数据帧转换成): 看来不错。我不需要构建和培训网络: learningRate = 1*10**-3 model = Sequential() model.a

我目前正在和Keras一起做一个项目,我试图确定一个与一组特征值相关的值。但我的网络一直给我带来难以置信的高损失,而且没有改善(我不期望有好的结果,但我期望比平均绝对误差好几个数量级,比我的目标值大)。所以我试着退一步,做一个线性网络,计算特征值之和。这应该是很容易的,因为网络的权重应该很容易达到1

我有两个数组,由输入值和目标值组成(我从数据帧转换成):

看来不错。我不需要构建和培训网络:

learningRate = 1*10**-3
model = Sequential()
model.add(Dense(1, input_dim=8, use_bias=False))
model.add(Activation("linear"))
opt = adam(lr=learningRate)
model.compile(loss='MAE', optimizer=opt)

fitDetails = model.fit(X, y, epochs=30, verbose=1)

for i in range(len(model.layers)):
    print('Layer ' + str(i) + ': ', model.layers[i].get_weights())
这很奇怪,因为重量应该是1。然后我尝试手动将重量设置为1:

model.layers[0].set_weights([np.array([[1] for i in range(8)])])
for i in range(len(model.layers)):
    print('Layer ' + str(i) + ': ', model.layers[i].get_weights())

model.evaluate(X, y)
更奇怪的是


那么有人知道出了什么问题吗?提前谢谢

我建议您通过忘记我们没有的数据的特征值,并使用虚拟人工数据(在任何情况下,试图建立一个总结其输入的模型与特征值没有任何特别关系),使示例完全可再现。顺便说一句,你的网络实际上是一个简单的线性回归。我建议你通过忘记我们没有的数据的特征值,并使用虚拟人工数据来完全重现这个例子(在任何情况下,试图建立一个总结其输入的模型与特征值没有任何特别的关系)。顺便说一句,你的网络实际上是一个简单的线性回归。
learningRate = 1*10**-3
model = Sequential()
model.add(Dense(1, input_dim=8, use_bias=False))
model.add(Activation("linear"))
opt = adam(lr=learningRate)
model.compile(loss='MAE', optimizer=opt)

fitDetails = model.fit(X, y, epochs=30, verbose=1)

for i in range(len(model.layers)):
    print('Layer ' + str(i) + ': ', model.layers[i].get_weights())
Epoch 1/30
31521/31521 [==============================] - 2s 48us/step - loss: 3266171041.9287
Epoch 2/30
31521/31521 [==============================] - 2s 49us/step - loss: 7649753416.7438
...
Epoch 29/30
31521/31521 [==============================] - 1s 44us/step - loss: 9600477128.1926
Epoch 30/30
31521/31521 [==============================] - 1s 44us/step - loss: 4003147634.3867

Layer 0:  [array([[ 0.6709176 ],
       [-3.3879364 ],
       [-1.4577906 ],
       [-0.11517545],
       [ 0.4304375 ],
       [-0.24380146],
       [ 0.8325586 ],
       [ 0.1383722 ]], dtype=float32)]
Layer 1:  []
model.layers[0].set_weights([np.array([[1] for i in range(8)])])
for i in range(len(model.layers)):
    print('Layer ' + str(i) + ': ', model.layers[i].get_weights())

model.evaluate(X, y)
Layer 0:  [array([[1.],
       [1.],
       [1.],
       [1.],
       [1.],
       [1.],
       [1.],
       [1.]], dtype=float32)]
Layer 1:  []
31521/31521 [==============================] - 1s 23us/step

20.5936894862014