【发布时间】:2020-08-13 05:50:21
【问题描述】:
keras 模型是这样的:
input_x = Input(shape=input_shape)
x=Conv2D(...)(input_x)
...
y_pred1 = Conv2D(...)(x) # shape of (None, 80, 80, 2)
y_pred2 = Dense(...)(x) # shape of (None, 4)
y_merged = Concatenate(...)([y_pred1, y_pred2])
model = Model(input_x, y_merged)
y_pred1 和 y_pred2 是我希望模型学习预测的结果。
但是y_pred1分支的损失函数fcn1需要y_pred2的预测结果,所以我要把两个分支的结果串联起来得到y_merged,这样fcn1就可以访问@ 987654329@.
问题是,我想使用Concatenate 层将y_pred1 (None, 4) 输出与y_pred2 (None, 80, 80, 2) 输出连接起来,但我不知道该怎么做。
如何将(None, 4) 重塑为(None, 80, 80, 1)?例如,用y_pred2 中的4 个元素和零填充(None, 80, 80, 1)。
有没有比使用Concatenate 层更好的解决方案?
【问题讨论】:
-
没有办法重塑它。也许你可以接受一些线性投影?或者你想要一个可训练的非线性投影——例如解码器网络?
-
这取决于您的功能和您想要实现的目标。您可以将 conv2D 层展平为
(None, 80*80*2)。您还可以广播密集层的输出,以匹配 conv2D 层的维度。 -
@MateenUlhaq
(None, 4)和(None, 80, 80, 2)是我模型中两个预测头的输出,我想将它们连接起来,以便一个预测头的损失函数可以使用另一个预测头的y_pred预测头。所以我在想也许我可以通过在(None, 80, 80, 1)中填充(None, 4)中的4 个元素和零来将(None,4)重塑为(None, 80, 80, 1)。但我不知道该怎么做,也不知道有没有更好的解决方案。 -
@MichaelJanz 正如我上面解释的,这两个张量是我模型中两个预测头的输出,我希望连接的张量成为我的最终模型输出。您能帮我广播 Dense 层的输出吗,或者您有更好的解决方案吗?
-
你打算如何处理连接的数据?有很多合理的方法可以做到这一点,但有些表示更容易训练。
标签: python keras keras-layer