MNIST 数据集上 keras 上的 i-RevNet

Posted

技术标签:

【中文标题】MNIST 数据集上 keras 上的 i-RevNet【英文标题】:i-RevNet on keras on MNIST dataset 【发布时间】:2019-01-15 22:26:18 【问题描述】:

我想在 keras 上的 MNIST 数据集上实现 i-RevNet,并从 i-RevNet 的输出生成原始的 28*28 输入图像,但我不知道。我能找到的网上资源都是基于tensorflow的。

【问题讨论】:

【参考方案1】:

重要的是这篇论文 https://arxiv.org/pdf/1802.07088.pdf - i-REVNET: DEEP INVERTIBLE NETWORKS 和这个 git https://github.com/jhjacobsen/pytorch-i-revnet

在阅读上述论文时,i-RevNets 中的关键组件是同胚层,关于拓扑和神经网络之间的链接 cf http://colah.github.io/posts/2014-03-NN-Manifolds-Topology/ - 神经网络、流形和拓扑 strong>(搜索“同胚”)

在https://github.com/jhjacobsen/pytorch-i-revnet 中,同胚层在class irevnet_block(nn.Module) 中实现,请注意有NO 操作会丢弃ma​​xpooling、平均... 等信息(除了输出层的),只应用了 batch normalization (https://towardsdatascience.com/batch-normalization-in-neural-networks-1ac91516821c),ReLUs 也是局部严格线性的。

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/ 中的keras 等效项

【讨论】:

以上是关于MNIST 数据集上 keras 上的 i-RevNet的主要内容,如果未能解决你的问题,请参考以下文章

Keras训练神经网络DEMO——全连接神经网络训练MNIST

MNIST 数据集上的 NuPIC

深度学习笔记:基于Keras库的MNIST手写数字识别

Keras:使用批量标准化在同一数据集上的不同训练和验证结果

Keras,训练期间验证集上的 auc 与 sklearn auc 不匹配

TersorflowTutorial_MNIST数据集上简单CNN实现