Keras:损失不断增加

Par*_*roi 1 python neural-network deep-learning keras tensorflow

代码:

import keras
import numpy as np

x = []
y = []

for i in range(1000):
    x.append((i/10.0))
    y.append(2.71828 ** (i/10.0))

x = np.asarray(x)
y = np.asarray(y)
x = x.T
y = y.T

model = keras.models.Sequential()
model.add(keras.layers.Dense(1, input_dim=1, activation='relu'))
model.add(keras.layers.Dense(100, activation='relu'))
model.add(keras.layers.Dense(1))

model.compile(loss='mean_squared_error', optimizer=keras.optimizers.SGD(lr=0.001))
model.fit(x, y, batch_size=1, shuffle=False)

tx = [0.0, 1.0, 10.0]
tx = np.asarray(tx)
tx = tx.T

print(model.predict(tx))
Run Code Online (Sandbox Code Playgroud)

这是一个非常简单的神经网络,旨在映射 e^x。这是我第一次使用 keras,当我运行它时,损失不断增加到无穷大。相反,它应该减少。

Tho*_*etz 6

如果损失增加到无穷大,则表明学习率过高。拟合 e^x 的问题,其中 x = 100 与您的情况一样,值的差异将非常大。因此梯度会非常大,更新也会一样大,这取决于你的学习率。然而,如果你的学习率非常小,网络将被那些大的更新所支配。这就是在深度学习中将值归一化的原因之一。

一个快速的解决方案是只使用前 100 个值或减小步长。