【发布时间】:2017-11-24 21:12:02
【问题描述】:
为什么 Keras.backend.flatten 没有显示正确的尺寸?我有以下内容:
x 是
之后:
Keras.backend.flatten(x)
x 变为:
为什么 x 不是 shape=(?, 4*8*62)
EDIT-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 的结果是
第二个 Lambda 的结果是
EDIT-2
尝试batch_flatten,但在我构建模型输出时下游出现错误(使用reshape 而不是batch_flatten 似乎有效)。 branch3x3 是 branch5x5 是
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)
output 语句导致kernel_initializer 出现以下错误:TypeError: 无法将类型对象转换为张量。内容:(无,32)。考虑将元素转换为支持的类型。
【问题讨论】:
-
请在发布之前检查您的代码是否可执行。当代码错误时,很难重现错误。您调用
K.concatenate([v[0], v[1], v[2]], axis=3)时只有两个输入[branch3x3, branch5x5]。 -
另外,是否有理由使用
Lambda层而不是 Keras 中实现的Concatenate和Flatten层? -
抱歉打错了。我的真实代码更长,所以在这里将其剥离以专注于主要问题。我正在使用 Lambda 层根据您在 stackoverflow.com/questions/45309236/… 中的建议创建模型(在这种情况下面临类似的问题)
-
我已经编辑并添加了一个示例以使其清楚:)。请看看这是否适合你。
标签: tensorflow keras flatten