肯塔·伊瓦萨基(Kenta Iwasaki)代表gram.ai的“胶囊之间的动态路由”中的capsnet体系结构的副本构建的副型Pytorch实现。
该模型的培训是使用Torchnet进行的,使用MNIST数据集加载和使用Torchvision进行预处理。
胶囊是一组神经元,其活性向量代表特定类型实体(例如对象或对象部分)的实例化参数。我们使用活动向量的长度来表示实体存在的概率及其表示代表实例参数的方向。一个级别的活动胶囊通过转换矩阵对高级胶囊的实例化参数进行预测。当多个预测一致时,较高的胶囊就会变得活跃。我们表明,经过区分训练的多层胶囊系统可以在MNIST上实现最先进的性能,并且比识别高度重叠的数字要比卷积网络要好得多。为了实现这些结果,我们使用划分的迭代路由机制:低级胶囊更喜欢将其输出发送到更高级别的胶囊,其活性向量具有很大的标量产品,其预测来自低级胶囊。
由Sara Sabour,Nicholas Frosst和Geoffrey E. Hinton撰写的纸。有关更多信息,请在此处查看论文。
步骤1调整训练时期,批量大小等capsule_network.py数量。
BATCH_SIZE = 100
NUM_CLASSES = 10
NUM_EPOCHS = 30
NUM_ROUTING_ITERATIONS = 3步骤2开始训练。如果您尚未在脚本中运行的同一目录中,则将下载MNIST数据集。确保运行vive Server!
$ sudo python3 -m visdom.server & python3 capsule_network.py 443rd时期的最高精度为99.7%。如下测试准确性/损失图的趋势所示,该模型可能达到更高的精度。

使用默认的Pytorch Adam优化器超级计,没有学习率计划。批处理大小为100的时期在带有GTX 1050的剃须刀刀片上需要〜3分钟,而NVIDIA TITAN XP上则需要〜2分钟
主要引用了这两种张量集和KERAS实现:
非常感谢 @innerpeace-wu对论文中概述的动态路由过程进行了讨论。
Gram.ai目前正在大量开发多种AI模型,可以免费向社区免费发布或免费发布,因此为什么我们不能保证对这项工作的完全支持。
但是,如果使用此实施的任何问题,或者您想以任何方式做出贡献,请随时发送电子邮件至[email protected]或在此存储库上打开新的GitHub问题。