MNIST数据集上基于keras的i-RevNet

时间:2018-08-08 15:23:55

标签: python keras

我想在keras的MNIST数据集上实现i-RevNet,并从i-RevNet的输出中生成原始的28 * 28输入图像,但是我没有任何线索。我能找到的在线资源都是基于tensorflow的。

1 个答案:

答案 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也是局部严格线性的。

Where do I call the BatchNormalization function in Keras?中的

是如何在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函数进行复制。参见mergesplit函数上的https://github.com/jhjacobsen/pytorch-i-revnet/blob/master/models/model_utils.py,它们使用torch.cattorch.split,其等效符号在https://keras.io/layers/merge/