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

时间:2017-06-15 06:15:28

标签: tensorflow neural-network

当我使用

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

怎么能实现这个目标?

1 个答案:

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

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