我想在keras的MNIST数据集上实现i-RevNet,并从i-RevNet的输出中生成原始的28 * 28输入图像,但是我没有任何线索。我能找到的在线资源都是基于tensorflow的。
答案 0 :(得分:0)
重要的是本文https://arxiv.org/pdf/1802.07088.pdf- i-REVNET:深入的可移植网络和此git https://github.com/jhjacobsen/pytorch-i-revnet
在阅读以上论文时,i-RevNets中的关键组成部分是同胚层,位于拓扑和神经网络之间的链接上,参见http://colah.github.io/posts/2014-03-NN-Manifolds-Topology/-神经网络,流形和拓扑(搜索“同胚”)
https://github.com/jhjacobsen/pytorch-i-revnet的同胚层中的是在class irevnet_block(nn.Module)
中实现的,请注意,有 NO 个操作会丢弃诸如 maxpooling,average,... 之类的信息>(除了输出层),仅应用批处理规范化(https://towardsdatascience.com/batch-normalization-in-neural-networks-1ac91516821c),ReLU也是局部严格线性的。
是如何在keras中实现这一点,只需将各层堆叠为同胚层即可:
homeomorphic layer -> NO POOLING, ... LAYERS
model.add(Dense(64, init='uniform'))
model.add(Activation('relu'))
model.add(BatchNormalization())
https://github.com/jhjacobsen/pytorch-i-revnet/blob/master/models/iRevNet.py中的其余代码,例如def inverse(self, x)
或def forward(self, x)
,可以使用https://keras.io/layers/merge/中的keras函数进行复制。参见merge
和split
函数上的https://github.com/jhjacobsen/pytorch-i-revnet/blob/master/models/model_utils.py,它们使用torch.cat
和torch.split
,其等效符号在https://keras.io/layers/merge/