在 TensorFlow 中实现 GLOM,部分整体层次结构
项目描述
GLOM TensorFlow
这个 Python 包试图在 TensorFlow 中实现 GLOM,它允许将几个不同组的转换器、神经领域、对比表示学习、蒸馏和胶囊组合起来。这是 Geoffrey Hinton 在他的论文 “如何在神经网络中表示部分整体层次结构”中提出的。
此外,Yannic Kilcher 的视频和Phil Wang 的 repo 对我实施这个项目很有帮助。
安装
运行以下命令进行安装:
pip install glom-tf
发展glom-tf
要安装glom-tf
以及您需要开发和测试的工具,请在您的 virtualenv 中运行以下命令:
git clone https://github.com/Rishit-dagli/GLOM-TensorFlow.git
# or clone your own fork
cd GLOM-TensorFlow
pip install -e .[dev]
关于 GLOM
GLOM 架构由大量使用完全相同权重的列组成。每一列都是一堆空间局部自动编码器,它们为小图像块中发生的事情学习多层次的表示。每个自动编码器使用多层自下而上编码器和多层自上而下解码器将一个级别的嵌入转换为相邻级别的嵌入。这些级别对应于部分-整体层次结构中的级别。
<small>一栏3个层级之间的交互</small>
作者分享的一个例子是在显示人脸图像时,单列可能会收敛于表示鼻孔、鼻子、脸和人的嵌入向量。
在每个离散时间和每个列中,一个级别的嵌入被更新为以下的加权平均值:
- 自下而上的神经网络在上一次作用于下一层的嵌入
- 自上而下的神经网络在上一次作用于上一层的嵌入
- 在前一个时间步嵌入向量
- 上一次相邻列中同一级别的嵌入的注意力加权平均值
对于静态图像,一个级别的嵌入应该随着时间的推移而稳定下来以产生相似的向量。
<small>特定时间嵌入的图片</small>
用法
from glomtf import Glom
model = Glom(dim = 512,
levels = 5,
image_size = 224,
patch_size = 14)
img = tf.random.normal([1, 3, 224, 224])
levels = model(img, iters = 12) # (1, 256, 5, 12)
# 1 - batch
# 256 - patches
# 5 - levels
# 12 - dimensions
使用return_all = True
参数获取每次迭代的所有列和级别状态。这也使您可以访问迭代中的所有级别数据以进行聚类,您也可以从中检查岛屿。
from glomtf import Glom
model = Glom(dim = 512,
levels = 5,
image_size = 224,
patch_size = 14)
img = tf.random.normal([1, 3, 224, 224])
all_levels = model(img, iters = 12, return_all = True) # (13, 1, 256, 5, 12)
# 13 - time
# top level outputs after iteration 6
top_level_output = all_levels[7, :, :, -1] # (1, 256, 512)
# 1 - batch
# 256 - patches
# 512 - dimensions
引文
@misc{hinton2021represent,
title = {How to represent part-whole hierarchies in a neural network},
author = {Geoffrey Hinton},
year = {2021},
eprint = {2102.12627},
archivePrefix = {arXiv},
primaryClass = {cs.CV}
}
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。
源分布
glom-tf-0.1.1.tar.gz
(10.6 kB
查看哈希)
内置分布
glom_tf-0.1.1-py3-none-any.whl
(11.1 kB
查看哈希)