胶囊网络(Capsule Network)的TensorFlow实现
来源:互联网 发布:js中集合和数组的区别 编辑:程序博客网 时间:2024/04/23 19:10
现在我们都知道Geoffrey Hinton
的胶囊网络(Capsule Network
)震动了整个人工智能领域,它将卷积神经网络(CNN)的极限推到一个新的水平。 网上已经有很多的帖子、文章和研究论文在探讨胶囊网络理论,以及它如何做的比传统的CNN更好。因此我不打算介绍这方面的内容,而是尝试使用谷歌的Colaboratory
工具在TensorFlow
上实现CpNet
。
你可以通过下面的几个链接了解CpNet
的理论部分:
- Geoffrey Hinton的演讲:“卷积神经网络的问题是什么?”
- 胶囊网络正在震动人工智能领域
- 胶囊之间的动态路由
现在我们开始写代码。
开始之前,你可以参考我的CoLab Notebook
执行以下代码:
CoLab网址:https://goo.gl/43Jvju
现在克隆github
上的仓库并安装依赖库。 然后,我们从仓库中取出MNIST
数据集,并将其移至父目录:
!git clone https://github.com/bourdakos1/capsule-networks.git !pip install -r capsule-networks / requirements.txt !touch capsule-networks / __ init__.py !mv capsule-networks capsule!mv capsule / data / ./data/ !ls
现在让我们导入所有的模块:
import osimport tensorflow as tffrom tqdm import tqdmfrom capsule.config import cfgfrom capsule.utils import load_mnistfrom capsule.capsNet import CapsNet
初始化
capsNet = CapsNet(is_training = cfg.is_training)
这就是胶囊网络(CpNet
)在Tensorboard
图上的样子:
训练
tf.logging.info('Graph loaded')sv = tf.train.Supervisor(graph = capsNet.graph, logdir = cfg.logdir, save_model_secs = 0)path = cfg.results +'/accuracy.csv' if not os.path.exists(cfg.results): os.mkdir(cfg.results)elif os.path.exists(path): os.remove(path) fd_results = open(path,'w')fd_results.write('step, test_acc\n')
现在创建TF会话(session
)并开始执行。
默认情况下,模型将被训练50个epoch
,批次大小为128。 你可以尝试不同的超参数组合:
with sv.managed_session() as sess: num_batch = int(60000 / cfg.batch_size) num_test_batch = 10000 // cfg.batch_size teX, teY = load_mnist(cfg.dataset, False) for epoch in range(cfg.epoch): if sv.should_stop(): break for step in tqdm(range(num_batch), total=num_batch, ncols=70, leave=False, unit='b'): global_step = sess.run(capsNet.global_step) sess.run(capsNet.train_op)if step % cfg.train_sum_freq == 0: _, summary_str = sess.run([capsNet.train_op, capsNet.train_summary]) sv.summary_writer.add_summary(summary_str, global_step)if (global_step + 1) % cfg.test_sum_freq == 0: test_acc = 0 for i in range(num_test_batch): start = i * cfg.batch_size end = start + cfg.batch_size test_acc += sess.run(capsNet.batch_accuracy, {capsNet.X: teX[start:end], capsNet.labels: teY[start:end]}) test_acc = test_acc / (cfg.batch_size * num_test_batch) fd_results.write(str(global_step + 1) + ',' + str(test_acc) + '\n') fd_results.flush()if epoch % cfg.save_freq == 0: sv.saver.save(sess, cfg.logdir + '/model_epoch_%04d_step_%02d' % (epoch, global_step))fd_results.close()tf.logging.info('Training done')
在NVIDIA TitanXp卡上运行50个
epoch
,花了大约6个小时。
但经过训练的网络效果惊人,总损失(total loss
)达到了不可思议的0.0038874。
下载训练好的模型
CpNet
模型网址: https://goo.gl/DN7SS3
原文: Running CapsuleNet on TensorFlow
阅读全文
1 0
- 胶囊网络(Capsule Network)的TensorFlow实现
- capsule network
- Capsule Network
- 先读懂CapsNet架构然后用TensorFlow实现:全面解析Hinton的提出的Capsule
- 深度学习及TensorFlow实现-深度前馈网络(deep feedforword network)
- mkv 是种封装 类似药品胶囊 capsule 里面装的是视频编码后的数据 youknow!
- tensorflow 实现游乐场的网络
- 胶囊理论的实现与代码分析
- Network-in-Network简单实现,基于tensorflow
- 深度学习 胶囊网络 看Hinton在论文中如何介绍胶囊的革命之处
- 排序网络(Sorting network )构造的C语言实现
- Deep Learning——TensorFlow平台下MNIST的实现(改进)(基于convolutional neural network)
- TensorFlow实现经典深度学习网络(6):TensorFlow实现基于LSTM的语言模型
- 基于tensorflow实现的简单卷积网络(CNN)
- 胶囊间的动态路由(2)
- 从AlexNet到胶囊网络,CNN这五年(视频详解)
- 从AlexNet到胶囊网络,CNN这五年(视频详解)
- 生成对抗网络的tensorflow实现
- 验证码
- 算法工程师项目开发流程
- 第十一周项目四:利用遍历思想解决图问题
- NEUQOJ 1865: Harry Potter And The Half-Blood Prince
- Unity3D
- 胶囊网络(Capsule Network)的TensorFlow实现
- Angular中前端导出CSV文件
- HDU
- 什么是基于注解的切面实现
- 第3章 System V IPC
- 数据库 ODBC与SQLSever2014连接
- shell
- 虚幻引擎开发多人游戏联机
- Android面试问题Activity