nn.Embedding模板类生成的对象
import torch
from torch import nn
embedding = nn.Embedding(num_embeddings=6,embedding_dim=3,padding_idx=0)
batch_vec = torch.arange(start=0,end=6,step=1).reshape(2,3)
embedding(batch_vec).shape # torch.Size([2, 3, 3])
该对象将索引矩阵升了一维,所升的这一维就是索引所转向量的维度,
pytorch的维度是这样的(dim=0,dim=1),
升的这一维默认放在更高的维度,就是(dim=0,dim=1,dim=2)
|
随机性与有效性:起点是随机的,终点是有效的(但不一定是最好的,)
import torch
from torch import nn
embedding = nn.Embedding(num_embeddings=6,embedding_dim=3,padding_idx=0)
batch_vec = torch.arange(start=0,end=6,step=1).reshape(2,3)
embedding(batch_vec)
tensor([[[ 0.0000, 0.0000, 0.0000],
[-0.9986, 0.2995, -1.3050],
[-0.8627, 0.4689, -0.1170]],
[[-0.3458, 1.2517, -0.7372],
[ 0.4307, -0.3824, 0.1640],
[-1.2211, 1.0763, 1.4638]]], grad_fn=EmbeddingBackward0)
AI所要训练的参数是在定义nn.Embedding模板类时初始化的
nn.Embedding模板类在初始化参数时,是随机的,
这样随机地将一个整数索引转换为n维浮点向量,有效吗?
其实它的思想跟神经网络层的思想是一样的,参数随机初始化,
在训练时梯度下降,逐步向不随机的方向,就是标签的方向靠近
随机当然是无效的,训练后才有效
|