在TensoFlow中构造图时获取图层形状



当我使用

    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])

这样,两个维度都是可变的。

最新更新