添加 2 个不同秩的张量

Add 2 tensors with different rank

我有 2 个张量:形状为 (None, 16, 7, 7, 1024) 的 A 和形状为 (1, 16, 7, 7, 1024) 的 B。我使用 keras.layers.add([A, B]) 添加这些张量。我希望有一个形状为 (None, 16, 7, 7, 1024) 的张量,但我得到了 (1, 16, 7, 7, 1024) ==> 请注意,批量大小现在变为 1。 如何得到我想要的结果(None)?

代码:

_h_state = np.zeros((16, 7, 7, 1024))
h_state = Input(tensor=tf.constant(_h_state, dtype=tf.float32), name='input_h_state')
enc = encoder.output

enc_x = Conv3D(filters=256, kernel_size=(1, 1, 1), strides=(1, 1, 1), name='enc_conv')(enc)
h_state_expanded = Lambda(lambda x: K.expand_dims(x, 0))(h_state)
h_state_x = Conv3D(filters=256, kernel_size=(1, 1, 1), strides=(1, 1, 1), name='h_state_conv')(h_state_expanded)
x = layers.add([enc_x, h_state_x])
x = Activation('tanh')(x)
.
.
.

剧情:

当您打印 x.shape 时,输出是 (None, 16, 7, 7, 1024),但有趣的是 plot_modelmodel.summary 都显示 "unbroadcast" 第一维。

我相信您是对的 - 在这种特殊情况下,方法 keras.layers._Merge.compute_output_shape 可能无法正确处理第一维的广播。这可能应该通过拉取请求来解决。

同时,您可以改用:

x = Lambda(lambda x: x[0] + x[1])([enc_x, h_state_x])

这给出了预期的输出形状。