machine-learning - tensorflow dynamic_rnn类型错误: 'Tensor' object is not iterable

标签 machine-learning tensorflow recurrent-neural-network

我正在尝试让基本的 LSTM 在 TensorFlow 中工作。我收到以下错误:

类型错误:“张量”对象不可迭代。

有问题的行是:

rnn_outputs, final_state = tf.nn.dynamic_rnn(cell, x, sequence_length=seqlen,
                                            initial_state=init_state,)`  

我在 Windows 7 上使用版本 1.0.1。我的输入和标签具有以下形状

x_shape = (50, 40, 18), y_shape = (50, 40)

地点:

  • 批量大小 = 50
  • 序列长度 = 40
  • 每一步的输入向量长度 = 18

我正在按如下方式构建图表

def build_graph(learn_rate, seq_len, state_size=32, batch_size=5):

    # use a fixed sequence length
    seqlen = tf.constant(seq_len, shape=[batch_size],dtype=tf.int32)

    # Placeholders
    x = tf.placeholder(tf.float32, [batch_size, None, 18])
    y = tf.placeholder(tf.float32, [batch_size, None])
    keep_prob = tf.constant(1.0)

    # RNN
    cell = tf.contrib.rnn.LSTMCell(state_size)
    init_state = tf.get_variable('init_state', [1, state_size],
                                initializer=tf.constant_initializer(0.0))
    init_state = tf.tile(init_state, [batch_size, 1])
    rnn_outputs, final_state = tf.nn.dynamic_rnn(cell, x, sequence_length=seqlen,
                                                initial_state=init_state,)

    # Add dropout, as the model otherwise quickly overfits
    rnn_outputs = tf.nn.dropout(rnn_outputs, keep_prob)

    # Prediction layer
    with tf.variable_scope('prediction'):
        W = tf.get_variable('W', [state_size, num_classes])
        b = tf.get_variable('b', [num_classes], initializer=tf.constant_initializer(0.0))

    preds = tf.tanh(tf.matmul(rnn_outputs, W) + b)

    # MSE
    loss = tf.square(tf.subtract(y, preds))

    # loss = tf.reduce_mean(tf.nn.sparse_softmax_cross_entropy_with_logits(logits, y))
    train_step = tf.train.AdamOptimizer(learn_rate).minimize(loss)

谁能告诉我我错过了什么?

最佳答案

序列长度应该是可迭代的,例如列表或张量,而不是标量。具体而言,您需要将 sequence length = 40 替换为每个输入的长度列表。例如,如果您的第一个序列有 10 个步骤,第二个序列有 13 个步骤,第三个序列有 18 个步骤,则您将传入 [10, 13, 18]。这让 TensorFlow 的动态 RNN 知道要展开多少步(我相信它内部使用了 while 循环)。

关于machine-learning - tensorflow dynamic_rnn类型错误: 'Tensor' object is not iterable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42947351/

相关文章:

Python 机器学习/数据科学项目结构

python - 如何在反向传播算法中使用链式法则的结果中的矩阵相乘

tensorflow - Tensorflow 中的 tf.rank 函数

python - 在 tensorflow 2.0 中保存和加载模型

keras - keras 中的多对一实现

algorithm - 确定两个类是否线性可分(在二维算法上)

python - Matplotlib 中的意外缺口箱线图、Seaborn 中的错误

python - 来自keras模型中图像列表的TensorFlow数据集

Python - 使用 LSTM 循环神经网络和 Keras 进行模式预测

python - 如何有效地解码 PyTorch 中的嵌入?