【问题标题】:type error 'tensor' object is not iterable when I using tf.contrib.rnn.LayerNormBasicLSTMCell当我使用 tf.contrib.rnn.LayerNormBasicLSTMCell 时,类型错误“张量”对象不可迭代
【发布时间】:2017-06-03 01:01:14
【问题描述】:

我的 tensorflow 版本是 1.0.0。当我使用 tf.contrib.rnn.GRUCell(n_hidden_​​units) 正常运行,但使用 tf.contrib.rnn.LayerNormBasicLSTMCell(n_hidden_​​units) 运行时出现错误:“类型错误‘张量’对象不可迭代”

`with tf.variable_scope('init_name',initializer=tf.orthogonal_initializer()):   

        cell = tf.contrib.rnn.LayerNormBasicLSTMCell(n_hidden_units)
        init_state = tf.get_variable('init_state', [1, n_hidden_units],initializer=tf.constant_initializer(0.0))  #tf.constant_initializer(0.0)
        init_state = tf.tile(init_state, [train_batch_size, 1])

        outputs, states = tf.nn.dynamic_rnn(
        cell,X,dtype=tf.float32,sequence_length=true_lenth,initial_state=init_state)`

错误是:

/usr/anaconda3/lib/python3.5/site-packages/tensorflow/python/ops/rnn.py in <lambda>()
681 
682     input_t = nest.pack_sequence_as(structure=inputs, flat_sequence=input_t)--> 683     call_cell = lambda: cell(input_t, state)    684     685     if sequence_length is not None:/usr/anaconda3/lib/python3.5/site-packages/tensorflow/contrib/rnn/python/ops/rnn_cell.py in __call__(self, inputs, state, scope)1228 1229     with vs.variable_scope(scope or 
"layer_norm_basic_lstm_cell"):
-> 1230       c, h = state

1231 args = array_ops.concat([inputs, h], 1) 第1232章

/usr/anaconda3/lib/python3.5/site-packages/tensorflow/python/framework/ops.py in iter(self)

514       TypeError: when invoked.
515     """
--> 516     raise TypeError("'Tensor' object is not iterable.")
517 
518   def __bool__(self):

TypeError: 'Tensor' object is not iterable.

有人可以帮助我吗?非常感谢。

【问题讨论】:

    标签: tensorflow


    【解决方案1】:

    LayerNormBasicLSTMCell 要求初始状态是 (num_units, num_units) 的元组。

    您可以通过以下方式使您的代码正常工作

        cell = tf.contrib.rnn.LayerNormBasicLSTMCell(n_hidden_units)
        init_state = (tf.zeros([train_batch_size, n_hidden_units]), 
                      tf.zeros([train_batch_size, n_hidden_units]))
    
        outputs, states = tf.nn.dynamic_rnn(
            cell, X, dtype=tf.float32, 
            sequence_length=true_lenth,initial_state=init_state)
    

    【讨论】:

    • 是的!成功了,谢谢~由于更新,我改成了:init_state = tf.contrib.rnn.LSTMStateTuple(tf.zeros([train_batch_size, n_hidden_units]),tf.zeros([train_batch_size, n_hidden_units]))
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-30
    • 2018-09-10
    • 2021-10-24
    • 1970-01-01
    • 2017-03-05
    • 2021-03-02
    • 2020-04-18
    相关资源
    最近更新 更多