LSTM Tensor shape and hyper parameters Tensorflow

我正在学习如何使用LSTM RNN。我看到了这个教程:https://www.youtube.com/watch?v=SeffmcG42SY&之后,我尝试应用所学内容并更改数据集。问题是,我对所有的重塑操作感到有些迷惑,我不太清楚如何使用它们以及它们为什么在这里…我的数据集有7列和546行。以下是我的超参数设置:

# 超参数
lr = 0.001
training_iters = 100000
batch_size = 64
n_inputs = 7   # 列数
n_steps = 546  # 行数
n_hidden_units = 128   # 隐藏层中的神经元数量
n_classes = 1  # 类别数

当我启动会话时,情况如下:

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

然后,我收到了一个错误消息

“无法将大小为3822的数组重塑为形状(64,546,7)”

如果有人能解释这是如何工作的和/或如何解决这个问题,那将非常棒!

谢谢


回答:

LSTM单元有输入,并且LSTM单元会随着时间展开以处理一个序列的不同输入。由于我们使用批量学习算法,我们需要提供一批输入。因此,在TensorFlow中,LSTM的输入形状为(批量大小 X 展开的时间步长 X 输入大小)。

在你的情况下

  1. 批量大小 = 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。

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注