如何创建一个未知维度的张量

How to create a tensor with an unknown dimension

我的神经网络中有一个层,其输出向量 x 大小为 [?, N]。 (批量大小的第一个维度)。我想在下一层(Lambda 层)中声明一个相同大小的 ones 张量。我发现我不能使用 y = keras.backend.ones(x.shape),因为批量大小仅在运行时可用。我怎样才能创建这个张量?

正如今天在评论中所建议的那样,K.ones_like 有效:

from keras import backend as K
a = K.placeholder(shape=(None, 5))
b = K.ones_like(a)
print(b.shape)

>> TensorShape([Dimension(None), Dimension(5)])

根据你正在做的操作类型,你也可以制作一个形状为 [N] 的张量并依靠广播来节省内存:

from keras import backend as K
a = K.placeholder(shape=(None, 5))
b = K.ones(a.shape[-1])
print(a + b)

>> <tf.Tensor 'add:0' shape=(?, 5) dtype=float32>