前沿TensorFlow Pytorch Keras代码实现深度学习大神Hinton NIPS2017 Capsule论文
Posted 新智元
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了前沿TensorFlow Pytorch Keras代码实现深度学习大神Hinton NIPS2017 Capsule论文相关的知识,希望对你有一定的参考价值。
【AI WORLD 2017世界人工智能大会倒计时 3 天】
在2017年11月8日在北京国家会议中心举办的AI World 2017世界人工智能大会上,我们邀请到阿里巴巴副总裁、iDST副院长华先胜,旷视科技Face++首席科学家、旷视研究院院长孙剑博士,腾讯优图实验室杰出科学家贾佳亚教授,以及硅谷知名企业家、IEEE Fellow Chris Rowen,共论人脸识别等前沿计算机视觉技术。
抢票链接:http://www.huodongxing.com/event/2405852054900?td=4231978320026
大会官网:http://www.aiworld2017.com
新智元推荐
来源:专知
【新智元导读】10月26日,深度学习元老Hinton的NIPS2017 Capsule论文《Dynamic Routing Between Capsules》终于在arxiv上发表。今天相关关于这篇论文的TensorFlow\Pytorch\Keras实现相继开源出来,让我们来看下。
摘要:Capsule 是一组神经元,其活动向量(activity vector)表示特定实体类型的实例化参数,如对象或对象部分。我们使用活动向量的长度表征实体存在的概率,向量方向表示实例化参数。同一水平的活跃 capsule 通过变换矩阵对更高级别的 capsule 的实例化参数进行预测。当多个预测相同时,更高级别的 capsule 变得活跃。我们展示了判别式训练的多层 capsule 系统在 MNIST 数据集上达到了最好的性能效果,比识别高度重叠数字的卷积网络的性能优越很多。为了达到这些结果,我们使用迭代的路由协议机制:较低级别的 capsule 偏向于将输出发送至高级别的 capsule,有了来自低级别 capsule 的预测,高级别 capsule 的活动向量具备较大的标量积。
CapsNet-PyTorch
python依赖包
Python 3
PyTorch
TorchVision
TorchNet
TQDM
Visdom
使用说明
第一步 在capsule_network.py
文件中设置训练epochs,batch size等
BATCH_SIZE = 100NUM_CLASSES = 10NUM_EPOCHS = 30NUM_ROUTING_ITERATIONS = 3
Step 2 开始训练. 如果本地文件夹中没有MNIST数据集,将运行脚本自动下载到本地. 确保 PyTorch可视化工具Visdom正在运行。
$ sudo python3 -m visdom.server & python3 capsule_network.py
基准数据
经过30个epoche的训练手写体数字的识别率达到99.48%. 从下图的训练进度和损失图的趋势来看,这一识别率可以被进一步的提高 。
采用了PyTorch中默认的Adam梯度优化参数并没有用到动态学习率的调整。 batch size 使用100个样本的时候,在雷蛇GTX 1050 GPU上每个Epochs 用时3分钟。
待完成
扩展到除MNIST以外的其他数据集。
Credits
主要借鉴了以下两个 TensorFlow 和 Keras 的实现:
Keras implementation by @XifengGuo
TensorFlow implementation by @naturomics
Many thanks to @InnerPeace-Wu for a discussion on the dynamic routing procedure outlined in the paper.
Python依赖包
Python
NumPy
Tensorflow (I'm using 1.3.0, not yet tested for older version)
tqdm (for displaying training progress info)
scipy (for saving image)
使用说明
训练
*第一步 * 用git命令下载代码到本地.
$ git clone https://github.com/naturomics/CapsNet-Tensorflow.git
$ cd CapsNet-Tensorflow
第二步 下载MNIST数据集(http://yann.lecun.com/exdb/mnist/), 移动并解压到data/mnist
文件夹(当你用复制wget
命令到你的终端是注意渠道花括号里的反斜杠)
$ mkdir -p data/mnist
$ wget -c -P data/mnist http://yann.lecun.com/exdb/mnist/{train-images-idx3-ubyte.gz,train-labels-idx1-ubyte.gz,t10k-images-idx3-ubyte.gz,t10k-labels-idx1-ubyte.gz}
$ gunzip data/mnist/*.gz
第三步 开始训练:
$ pip install tqdm # install it if you haven't installed yet
$ python train.py
tqdm包并不是必须的,只是为了可视化训练过程。如果你不想要在train.py
中将循环for in step ...
改成 ``for step in range(num_batch)就行了。
评估
$ python eval.py --is_training False
结果
错误的运行结果(Details in Issues #8):
training loss
test acc
Epoch | 49 | 51 |
---|---|---|
test acc | 94.69 | 94.71 |
Results after fixing Issues #8:
关于capsule的一点见解
一种新的神经单元(输入向量输出向量,而不是标量)
常规算法类似于Attention机制
总之是一项很有潜力的工作,有很多工作可以在之上开展
待办:
完成MNIST的实现Finish the MNIST version of capsNet (progress:90%)
在其他数据集上验证capsNet
调整模型结构
一篇新的投稿在ICLR2018上的后续论文(https://openreview.net/pdf?id=HJWLfGWRb) about capsules(submitted to ICLR 2018)
依赖包
Keras
matplotlib
使用方法
训练
第一步 安装 Keras:
$ pip install keras
第二步 用 git
命令下载代码到本地.
$ git clone https://github.com/xifengguo/CapsNet-Keras.git
$ cd CapsNet-Keras
第三步 训练:
$ python capsulenet.py
一次迭代训练(default 3).
$ python capsulenet.py --num_routing 1
其他参数包括想 batch_size, epochs, lam_recon, shift_fraction, save_dir
可以以同样的方式使用。 具体可以参考 capsulenet.py
测试
假设你已经有了用上面命令训练好的模型,训练模型将被保存在 result/trained_model.h5
. 现在只需要使用下面的命令来得到测试结果。
$ python capsulenet.py --is_training 0 --weights result/trained_model.h5
将会输出测试结果并显示出重构后的图片。测试数据使用的和验证集一样 ,同样也可以很方便的在新数据上验证,至于要按照你的需要修改下代码就行了。
如果你的电脑没有GPU来训练模型,你可以从https://pan.baidu.com/s/1hsF2bvY下载预先训练好的训练模型
结果
主要结果
运行 python capsulenet.py
: epoch=1 代表训练一个epoch 后的结果 在保存的日志文件中,epoch从0开始。
Epoch | 1 | 5 | 10 | 15 | 20 |
---|---|---|---|---|---|
train_acc | 90.65 | 98.95 | 99.36 | 99.63 | 99.75 |
vali_acc | 98.51 | 99.30 | 99.34 | 99.49 | 99.59 |
损失和准确度:
一次常规迭代后的结果
运行 python CapsNet.py --num_routing 1
Epoch | 1 | 5 | 10 | 15 | 20 |
---|---|---|---|---|---|
train_acc | 89.64 | 99.02 | 99.42 | 99.66 | 99.73 |
vali_acc | 98.55 | 99.33 | 99.43 | 99.57 | 99.58 |
每个 epoch 在单卡GTX 1070 GPU上大概需要110s
注释: 训练任然是欠拟合的,欢迎在你自己的机器上验证。学习率decay还没有经过调试, 我只是试了一次,你可以接续微调。
测试结果
运行 python capsulenet.py --is_training 0 --weights result/trained_model.h5
模型结构:
Kaggle (this version as self-contained notebook):
MNIST Dataset running on the standard MNIST and predicting for test data
MNIST Fashion running on the more challenging Fashion images.
TensorFlow:
naturomics/CapsNet-Tensorflow
Very good implementation. I referred to this repository in my code.InnerPeace-Wu/CapsNet-tensorflow
I referred to the use of tf.scan when optimizing my CapsuleLayer.LaoDar/tf_CapsNet_simple
PyTorch:
nishnik/CapsNet-PyTorch
timomernick/pytorch-capsule
gram-ai/capsule-networks
andreaazzini/capsnet.pytorch
leftthomas/CapsNet
MXNet:
AaronLeong/CapsNet_Mxnet
Lasagne (Theano):
DeniskaMazur/CapsNet-Lasagne
Chainer:
soskek/dynamic_routing_between_capsules
参考网址链接:
https://github.com/gram-ai/capsule-networks
https://github.com/naturomics/CapsNet-Tensorflow
https://github.com/XifengGuo/CapsNet-Keras
本文经授权转载自专知:Quan_Zhuanzhi,特此感谢!
深入了解AI 技术进展和产业情况,参加新智元世界人工智能大会,马上抢票!
【AI WORLD 2017世界人工智能大会倒计时 3 天】点击图片查看嘉宾与日程。
抢票链接:http://www.huodongxing.com/event/2405852054900?td=4231978320026
AI WORLD 2017 世界人工智能大会购票二维码:
以上是关于前沿TensorFlow Pytorch Keras代码实现深度学习大神Hinton NIPS2017 Capsule论文的主要内容,如果未能解决你的问题,请参考以下文章
剑指TensorFlow,PyTorch Hub官方模型库一行代码复现主流模型
CUDA入门教程;Transformer太火不是好事?;探求GPU极限性能的利器|AI系统前沿动态...