我遇到的具体问题是学习关系. 我有一个 0 到 19 的数组(输入值)和一个 0、1、4、9、16、25、36 等的目标数组,一直到=361。
我有以下 LSTM 架构:
1 input node
1 output node
32 hidden units
现在,有趣的是,我不小心错误地训练了我的网络,因为我在训练时忘记了反转预期的输出列表。所以我训练了网络:
从学习率 1 开始,每 400 个 epoch 减半,在 3000 个 epoch 之后,我的错误(从数百万开始)是 0.2。
但是,当我去纠正这个错误时,我的错误几乎不会低于 100,000。测试网络表明它在低输入时表现良好,但一旦开始达到从那以后,它真的很难将输出值提高到 250 以上。
我只是想知道是否有人对此有解释,至于为什么 LSTM 努力学习以指数方式增加,但似乎能够学会以指数方式减少就好了。
用代码编辑:
a = np.array([i for i in range(20)])
b = np.array([i**2 for i in range(20)])
np.random.seed(5)
ls = LSTM(1, 1, 32, learning_rate=1, regression=1)
# Input size = 1, output size = 1, hidden units = 32
if 1:
for k in range(3000):
total = 0
for i in range(20):
ls * a[i]
for i in range(20):
total += ls / b[i]
if k % 400 == 0:
ls.learning_rate *= 0.5
print(k, ":", total)
ls.update_params()
for i in a:
print(i, ls*i)
#ls.save_state('1.trainstate')
for i in range(20,30):
print(ls*i)
请注意,此代码使用我使用 numpy 编写的类。如果需要,我也会包含此代码,只是大约 300 行,我不希望任何人经历所有这些