当我使用
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])
如何实现这一点?
有两种"种类"的形状:可以在编译时推断的静态形状和仅在运行时知道的动态形状。要获取静态形状,您可以在张量上调用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])
这样,两个维度都是可变的。