TensorFlow:“TypeError:预期int32,得到包含'_Message'类型的张量的列表”

时间:2016-05-08 09:12:04

标签: tensorflow

当我运行以下代码时:

import tensorflow as tf

pivot = tf.constant([1, 2])
my_ones = tf.ones([2, 3])
padded = tf.pad(my_ones, [[pivot[0], 0], [1,1]])
sess = tf.Session()

init_op = tf.initialize_all_variables()
sess.run(init_op)
my_ones_var = sess.run(padded)
print("my_ones, ", my_ones_var)

...我在包含tf.pad()

的行上收到错误消息
TypeError: Expected int32, got list containing Tensors of type '_Message' instead

我该如何做到这一点?

3 个答案:

答案 0 :(得分:4)

TL; DR:您目前无法将张量参数定义为包含张量的列表(列表),因此您必须手动构建填充。

以下行发生此错误:

padded = tf.pad(my_ones, [[pivot[0], 0], [1,1]])

失败的原因是因为pivot[0]tf.Tensortf.pad()期望第二个参数tf.Tensor,而TensorFlow当前不转换列表(列表) )将tf.Tensor个对象包含在一个新的张量中。解决方法是使用tf.pack()手动构建填充张量:

paddings = tf.pack([tf.pack([pivot[0], 0]), [1, 1]])
padded = tf.pad(my_ones, paddings)

我们正在研究这种情况可能会自动发生的情况,因此您的原件可以正常工作。

编辑:现在支持自动打包(自TensorFlow 0.9起),因此以下代码现在可以使用:

padded = tf.pad(my_ones, [[pivot[0], 0], [1, 1]])

答案 1 :(得分:2)

嗨,所有问题都归因于Keras版本。我首先尝试过没有任何成功。卸载Keras并通过pip安装。它对我有用。

我在Keras 1.0.2&解决了Keras 1.2.0

希望这会有所帮助。谢谢

答案 2 :(得分:0)

您只需使用tf.concat

更新所有行

例如

表示= tf.concat(0,[tf.reduce_mean(tf.gather(vectors,tf.reshape(tf.where(tf.equal(assignments,c)),[1,-1])),reduction_indices = [1])对于范围(k)中的c])

应改为

表示= tf.concat([tf.reduce_mean(tf.gather(vectors,tf.reshape(tf.where(tf.equal(assignments,c)),[1,-1])),reduction_indices = [ 1])对于范围(k)中的c,0)