当我使用
时 concat = tf.concat([query_rep, title_rep, cos_similarity], axis=1)
print(concat.shape[1].value)
# query_rep + title_rep + cos_similarity
hidden_size = concat.shape[1]
我发现我无法获得连续形状,它会返回None
。我必须专门为hidden_size
指定一个值,例如hidden_size=201
。如何自动获取形状?
此外,对于我的CNN
网络,我想在每个批次而不是整个数据集中填充输入序列。所以我必须让max_len
成为placeholder
,但后来我发现placeholder
不能作为另一个placeholder
的参数。例如以下代码不起作用
self.max_len = tf.placeholder(int32)
self.query_holder = tf.placeholder(tf.int32, shape=[None, self.max_len])
怎么能实现这个目标?
答案 0 :(得分:1)
有两种"种类"形状:可以在编译时推断出的静态形状和仅在运行时知道的动态形状。要获得静态形状,您可以在张量上调用my_tensor.get_shape()
,以访问可以调用tf.shape(my_tensor)
的动态形状。如果get_shape()
返回None
,则只能动态了解形状。如果您有关于形状的其他信息,可以使用my_tensor.set_shape()
设置形状。
关于第二个问题,为什么不使用
self.query_holder = tf.placeholder(tf.int32, shape=[None, None])
这样两个维度都是可变的。