multidim-positional-encoding 项目介绍
项目概述
multidim-positional-encoding
是一个实际而易于下载的项目,提供了用于 PyTorch 和 TensorFlow 的一维、二维和三维正弦位置编码实现。这一技术能够为不同维度的张量提供位置信息编码,以此增强神经网络中的位置感知能力。起初,位置编码仅限于一维,但本项目成功地扩展了二维和三维位置编码的实现。
功能与特点
-
多维位置编码:
- 支持对形如
(batchsize, x, ch)
,(batchsize, x, y, ch)
和(batchsize, x, y, z, ch)
的张量进行位置编码。 - 编码过程会沿着
ch
通道维度计算。 - 这也适用于如
(batchsize, ch, x)
的张量,只需在类名前加Permute
即可实现。
- 支持对形如
-
简便的安装方式:
- 可以通过简单的
pip install
命令安装全部或单独的 PyTorch 或 TensorFlow 包。 - 安装命令:
pip install positional-encodings[pytorch,tensorflow]
。
- 可以通过简单的
-
兼容性:
- 适用于 PyTorch 和 TensorFlow 的编码库。
- 提供了
Summer
类,用于将输入张量与位置编码相加。
使用示例
PyTorch 示例
以下代码展示了如何使用 PyTorch 实现位置编码:
import torch
from positional_encodings.torch_encodings import PositionalEncoding1D, Summer
p_enc_1d_model = PositionalEncoding1D(10)
p_enc_1d_model_sum = Summer(p_enc_1d_model)
x = torch.rand(1,6,10)
penc_no_sum = p_enc_1d_model(x)
penc_sum = p_enc_1d_model_sum(x)
TensorFlow 示例
在 TensorFlow 中的使用方式类似,以下是一个二维位置编码的示例:
import tensorflow as tf
from positional_encodings.tf_encodings import TFPositionalEncoding2D, TFSummer
p_enc_2d = TFPositionalEncoding2D(170)
y = tf.zeros((1,8,6,2))
print(p_enc_2d(y).shape)
版本变更说明
在 6.0.1
版本之后,用户可以选择单独安装 PyTorch 或 TensorFlow 库,无需一同安装两个庞大的包。然而代码的导入语法有所改变:
-
如果使用 PyTorch:
- 旧语法:
from positional_encodings import *
- 新语法:
from positional_encodings.torch_encodings import *
- 旧语法:
-
如果使用 TensorFlow:
- 新语法:
from positional_encodings.tf_encodings import *
- 新语法:
计算公式
位置编码使用以下正弦和余弦公式来实现:
-
一维:
[ PE(x,2i) = \sin(x/10000^{(2i/D)}) ]
[ PE(x,2i+1) = \cos(x/10000^{(2i/D)}) ]
-
二维和三维位置编码公式在项目中进行了更加复杂的扩展,能够为二维和三维空间的张量提供位置编码支持。
致谢与引用
感谢 PositionalEncoding2D 项目为本项目提供的灵感。在实现过程中参考了多篇研究论文和科学探索,继续努力以扩展该领域的应用。
这个项目为开发者提供了一个便捷工具,能够轻松地在不同框架和维度中应用位置编码,提升模型对空间信息的处理能力。