代码:
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))
这是一个非常简单的神经网络,它打算映射e ^ x。这是我第一次使用keras,当我运行它时,损失不断增加到无穷大。相反它应该减少。
答案 0 :(得分:0)
如果损失增加到无穷大,则表明学习率太高。拟合e ^ x的问题,其中x = 100,就像你的情况一样,值的差异将非常大。因此,渐变将非常大,并且更新将同样大,具体取决于您的学习速度。但是,如果您的学习率非常小,那么网络将由那些大型更新主导。这是在深度学习中将值标准化的原因之一。
一个快速的解决方案是只使用前100个值或减小步长。