当我运行以下代码时:
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
我该如何做到这一点?
答案 0 :(得分:4)
TL; DR:您目前无法将张量参数定义为包含张量的列表(列表),因此您必须手动构建填充。
以下行发生此错误:
padded = tf.pad(my_ones, [[pivot[0], 0], [1,1]])
失败的原因是因为pivot[0]
是tf.Tensor
,tf.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)