利用LSTM RNN预测Fibonacci



神经网络新手,请更正我的语法。

我正在尝试创建一个LSTM RNN,它将预测斐波那契序列。当我运行下面的代码时,损失仍然非常高(大约为35339663592701874176(。

  1. 为什么输入的形状必须是(batch_size, timesteps, input_dim)?在我的例子中,我有100数据条目,所以这将是我的batch_size,斐波那契序列接受2输入,所以这是input_dim,但在这种情况下timesteps会是什么?1
  2. LSTM的units不应该是1吗?如果我理解正确的话;单位;只是LSTM中隐藏状态节点的数量。因此在理论上,这两个输入中的每一个都将具有"0";1〃;训练后该隐藏状态的系数权重
  3. RNN是解决这个问题的合适模型吗?当我在网上看的时候,大多数人喜欢用斐波那契序列作为例子来解释RNN是如何工作的

感谢您的帮助!

import numpy as np
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers

# Create Training Data
xs = [[[1, 1]]]
ys = []
i = 0
while i < 100:
ys.append([xs[i][0][0]+xs[i][0][1]])
xs.append([[xs[i][0][1], ys[len(ys)-1][0]]])
i = i + 1
del xs[len(xs)-1]
xs = np.array(xs, dtype=float)
ys = np.array(ys, dtype=float)

# Create Model
model = keras.Sequential()
model.add(layers.LSTM(1, input_shape=(1, 2)))
model.add(layers.Dense(1))
model.compile(optimizer="adam", loss="mean_absolute_error", metrics=[ 'accuracy' ])
# Train
model.fit(xs, ys, epochs=100000)
  1. 您不能在某些值是其他值的10^21倍的情况下输入NN数据并期望其工作,但这并没有发生。

  2. 你在这里没有做任何真正需要LSTM(或任何RNN(的事情,你实际上没有使用时间维度,你基本上只是在尝试学习加法。也许你想做一些不同的事情(比如输入数字作为一个序列,或者让输出运行多个时间步长,并给你几个序列值(,但这不是你正在做的,也不清楚你想要什么。

  3. 单位数是您的内存/处理能力。RNN的每个单元能够接收来自先前时间步长中的所有单元的值。单独的一个单元不能做任何有趣的事情,尤其是在它之前没有层来预处理数据的情况下。

最新更新