创建常数或张量而在Keras / TF中不预先知道形状?

时间:2018-09-07 07:37:24

标签: python tensorflow keras

我正在研究一种自定义方法来对文本文档进行分类。每个文档的形状均为(None,3),其中None表示文档中标记的数量及其变量。然后每个批次将具有形状(无,无,3),其中第一个值表示batch_size。

在我的自定义层之一中,我需要创建一个大小为0的正方形矩阵,该大小等于该文档的标记数。问题是,当实例化图形时,我不知道它将是多少。实际上,每个文档的此数字可能会有所不同。

要使事情变得更加困难,此操作是K.map_fn()的一部分,因此无法创建新的张量。如果我事先知道令牌的数量(假设所有文档的令牌数量都相同),那么K.constant就可以很好地工作。

想法?

2 个答案:

答案 0 :(得分:1)

您正在寻找tf.zeros_like

x = tf.placeholder(tf.float32, shape=(None, None))
z = tf.zeros_like(x) # zeros the same shape and dtype as x

答案 1 :(得分:0)

您可以使用tf.shape()轻松获得张量的形状。您还可以按如下所示将其拆分为各个维度:

batch_size, num_tokens, last_dim = tf.unstack(tf.shape(input_tensor))

然后,您可以使用以下变量创建矩阵:

tf.zeros([batch_size, num_tokens] dtype=tf.float32)