LSTM 张量形状和超参数 Tensorflow

LSTM Tensor shape and hyper parameters Tensorflow

我正在学习如何使用 LSTM RNN。 我看到了这个教程:https://www.youtube.com/watch?v=SeffmcG42SY& 之后,我尝试应用所学知识并更改数据集。 问题是,我有点迷失了所有的重塑,我真的不知道如何使用它们以及它们为什么在这里...... 我的数据集有 7 列和 546 行。 这是我的超参数

# hyperparameters
lr = 0.001
training_iters = 100000
batch_size = 64

n_inputs = 7   # columns
n_steps = 546  # rows
n_hidden_units = 128   # neurons in hidden layer
n_classes = 1  # class

当我启动会话时,它看起来像这样:

with tf.Session() as sess:
    init = tf.global_variables_initializer()
    sess.run(init)
    step = 0
    while step * batch_size < training_iters:
        batch_xs, batch_ys = inputX, inputY
        batch_xs = batch_xs.reshape([batch_size, n_steps, n_inputs])
        sess.run([train_op], feed_dict={
            x: batch_xs,
            y: batch_ys,
        })
        if step % 20 == 0:
            print(sess.run(accuracy, feed_dict={
            x: batch_xs,
            y: batch_ys,
            }))
        step += 1

然后,我收到一条错误消息

"cannot reshape array of size 3822 into shape (64,546,7)"

如果有人能向我解释它是如何工作的and/or如何解决这个问题,那就太好了!

谢谢

LSTM 单元有输入,并且 LSTM 单元随着时间的推移展开,用于一个序列的不同输入。由于我们使用批量学习算法,我们需要提供一批输入。所以 tesorflow 中的 LSTM 输入是形状(batch_size X 时间步展开 X 输入大小)。

你的情况

  1. batch_size = 64
  2. 展开步数 = 546
  3. 输入大小 = 7

根据你的输入方式(你如何进行特征提取),你必须将其重塑为 64 X 546 X 7 (== 244608) 如果你的输入大小为 3822,这当然会失败

考虑 LSTM 从序列到序列的预测(一对一模型)。例如,假设您有一个句子列表(假设是 S 个句子)。假设你在每个句子中有 W 个单词。现在您想要预测每个句子中每个单词的词性标记。假设您将每个单词表示为热编码,并且您的词汇量为 V。因此热编码向量的大小将为 V。

现在您的 LSTM 模型输入形状将为(批量大小 X W X V),其中批量大小为 << S,通常为 32 或 64。