deep-learning - 如何在pytorch中实现低维嵌入层

标签 deep-learning pytorch layer embedding

我最近读了一篇 paper关于嵌入。

在等式。 (3)、f4096X1向量。作者尝试将向量压缩为theta (20X1 向量)通过使用嵌入矩阵 E .

方程很简单theta = E*f
我想知道它是否可以使用pytorch为了达到这个目标,那么在训练中,E可以自动学习。

如何完成剩下的?非常感谢。

演示代码如下:

import torch
from torch import nn

f = torch.randn(4096,1)

最佳答案

假设您的输入向量是 one-hot 即使用“嵌入层”,您可以直接使用 embedding layer来自以上以及其他一些事情的火炬。 nn.Embeddings将 one-hot 向量的非零索引作为长张量的输入。例如:如果特征向量是

f = [[0,0,1], [1,0,0]]

然后输入到nn.Embeddings将会

输入 = [2, 0]

然而,OP 提出的问题是通过矩阵乘法获得嵌入,下面我将解决这个问题。您可以定义一个模块来执行此操作,如下所示。因为,param 是 nn.Parameter 的一个实例它将被注册为参数,并在您调用 Adam 或任何其他优化器时进行优化。
class Embedding(nn.Module):
    def __init__(self, input_dim, embedding_dim):
        super().__init__()
        self.param = torch.nn.Parameter(torch.randn(input_dim, embedding_dim))

    def forward(self, x):
        return torch.mm(x, self.param)

如果您仔细注意到,这与没有偏差且初始化略有不同的线性层相同。因此,您可以通过使用下面的线性层来实现相同的目的。
self.embedding = nn.Linear(4096, 20, bias=False)
# change initial weights to normal[0,1] or whatever is required
embedding.weight.data = torch.randn_like(embedding.weight) 

关于deep-learning - 如何在pytorch中实现低维嵌入层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55427386/

相关文章:

python - 我可以在 tensorflow 中应用计算梯度吗?

Python 机器学习与音频(预测性维护)

python - 在我的 M1 Macbook Pro 上设置 keras-rl2

python - 尝试在 pytorch 中使用 cuda 时出现运行时错误 999

python - 在 PyTorch 中,图层权重和偏差是如何默认初始化的?

python - 在 Python 中使用 caffe.NetSpec() 时,train.prototxt 中的两个顶部 blob

pytorch - pytorch中有元素映射函数吗?

objective-c - 如何在点击时像 UIButton 一样在 UIImage 上实现突出显示?

WPF 图层控制

javascript - 在 Open Layers 3 中向矢量源添加圆