添加 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_model
和 model.summary
都显示 "unbroadcast" 第一维。
我相信您是对的 - 在这种特殊情况下,方法 keras.layers._Merge.compute_output_shape
可能无法正确处理第一维的广播。这可能应该通过拉取请求来解决。
同时,您可以改用:
x = Lambda(lambda x: x[0] + x[1])([enc_x, h_state_x])
这给出了预期的输出形状。
我有 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_model
和 model.summary
都显示 "unbroadcast" 第一维。
我相信您是对的 - 在这种特殊情况下,方法 keras.layers._Merge.compute_output_shape
可能无法正确处理第一维的广播。这可能应该通过拉取请求来解决。
同时,您可以改用:
x = Lambda(lambda x: x[0] + x[1])([enc_x, h_state_x])
这给出了预期的输出形状。