首页 > 解决方案 > 在 Keras 中实现架构的建议

问题描述

什么是使用 Keras 实现以下架构的简单方法。

C2AE 架构

有两个输入编码器合并,部分输出提供给解码器。最后一层的损失传播到合并层,两个编码器之间的差异反向传播到一个编码器;两个网络之间的差异被添加到反向传播的输出损失中并传递给另一个网络。

标签: kerasdeep-learning

解决方案


我已经开始实施它,如下所示:

Y=Input(shape=(100,),name='Fe_input')
y=Dense(100, activation=LeakyReLU(alpha=0.0001))(Y)
y=BatchNormalization()(y)
y=Dense(60, activation=LeakyReLU(alpha=0.0001))(y)
y=BatchNormalization()(y)
y=Dense(20, activation=LeakyReLU(alpha=0.0001))(y)
y=BatchNormalization()(y)

X=Input(shape=(512,),name='Fx_input')
x=Dense(100, activation=LeakyReLU(alpha=0.0001))(X)
x=BatchNormalization()(x)
x=Dense(60, activation=LeakyReLU(alpha=0.0001))(x)
x=BatchNormalization()(x)
x=Dense(20, activation=LeakyReLU(alpha=0.0001))(x)
x=BatchNormalization()(x)

merge_layer=concatenate([x,y], name='merge_layer')
# I need to push partial output to merge layer to the next layer. Not sure how to       
#do that.
x=Dense(60, activation=LeakyReLU(alpha=0.0001))(x)
x=BatchNormalization()(x)

Fd=Dense(100, activation='sigmoid')(x)
model=Model([X,Y],[merge_layer, Fd])
model.compile(...)

如何获取部分输出并将其发送到解码器部分?此外,如何将反向传播期间的梯度求和并推送到其中一个分支?


推荐阅读