Keras.backend.flatten为什么不能正确显示维度?我的代码如下:
x是<tf.Tensor 'concat_8:0' shape=(?, 4, 8, 62) dtype=float32>
之后使用Keras.backend.flatten:
Keras.backend.flatten(x)
x的形状变成了:<tf.Tensor 'Reshape_22:0' shape=(?,) dtype=float32>
x为什么不是形状为(?, 4*8*62)
编辑-1
如果我使用batch_flatten
(下面的branch3x3
和branch5x5
都是来自之前卷积的张量),那么我会得到(?, ?):
x = Lambda(lambda v: K.concatenate([v[0], v[1]], axis=3))([branch3x3, branch5x5])
x = Lambda(lambda v: K.batch_flatten(v))(x)
第一个Lambda的结果是<tf.Tensor 'lambda_144/concat:0' shape=(?, 4, 8, 62) dtype=float32>
第二个Lambda的结果是<tf.Tensor 'lambda_157/Reshape:0' shape=(?, ?) dtype=float32>
编辑-2
尝试使用batch_flatten
,但在构建模型输出时遇到错误(改用reshape
似乎可以解决)。branch3x3
是<tf.Tensor 'conv2d_202/Elu:0' shape=(?, 4, 8, 30) dtype=float32>,而branch5x5
是<tf.Tensor 'conv2d_203/Elu:0' shape=(?, 4, 8, 32) dtype=float32>:
from keras import backend as K
x = Lambda(lambda v: K.concatenate([v[0], v[1]], axis=3))([branch3x3, branch5x5])
x = Lambda(lambda v: K.batch_flatten(v))(x)
y = Conv1D(filters=2, kernel_size=4)(Input(shape=(4, 1)))
y = Lambda(lambda v: K.batch_flatten(v))(y)
z = Lambda(lambda v: K.concatenate([v[0], v[1]], axis=1))([x, y])
output = Dense(32, kernel_initializer=TruncatedNormal(), activation='linear')(z)
cnn = Model(inputs=[m1, m2], outputs=output)
< p >对于< code >kernel_initializer,输出
语句导致以下错误:< strong >类型错误:无法将类型转换为张量的对象。内容:(无,32)。考虑将元素强制转换为支持的类型。
[branch3x3,branch5x5]
的调用K.concatenate([v[0], v[1], v[2]], axis=3)
。 - Yu-YangConcatenate
和Flatten
层而不是Lambda
层有什么原因吗? - Yu-Yang