这个方法可以把不可以训练的Tensor变成可以通过反向传播更新的参数。
我们以线性回归为例:
先看一下普通的版本
import torch
from torch import nn
class Linear_Regression(nn.Module):
def __init__(self):
super(Linear_Regression, self).__init__()
self.test = torch.rand(1, 2)
self.linear = nn.Linear(2, 1)
def forward(self, x):
y = self.linear(x)
return y
input = torch.rand([3, 2])
linear = Linear_Regression()
print(linear(input))
print((list(linear.named_parameters())))
下面是 引用 nn.Parameter()的版本
import torch
from torch import nn
class Linear_Regression(nn.Module):
def __init__(self):
super(Linear_Regression, self).__init__()
self.test = nn.Parameter(torch.rand(1, 2))
self.linear = nn.Linear(2, 1)
def forward(self, x):
y = self.linear(x)
return y
input = torch.rand([3, 2])
linear = Linear_Regression()
print(linear(input))
print((list(linear.named_parameters())))
nn.Embeddding接受两个重要参数:
num_embeddings:字典的大小,就是我这个序列有多少个词
embedding_dim:要将单词编码成多少维的向量
代码如下:
假设我有5个词,我要把这个5个词转换成3维的tensor
input = torch.arange(5)
print(input)
emb = nn.Embedding(5,3)
print(emb(input))
torch.cat(tensors,dim=0,out=None)→ Tensor
torch.cat()对tensors沿指定维度拼接,但返回的Tensor的维数不会变
>>> import torch
>>> a = torch.rand((2, 3))
>>> b = torch.rand((2, 3))
>>> c = torch.cat((a, b))
>>> a.size(), b.size(), c.size()
(torch.Size([2, 3]), torch.Size([2, 3]), torch.Size([4, 3]))
可以看到c和a、b一样都是二维的。
torch.stack(tensors,dim=0,out=None)→ Tensor
torch.stack()同样是对tensors沿指定维度拼接,但返回的Tensor会多一维
>>> import torch
>>> a = torch.rand((2, 3))
>>> b = torch.rand((2, 3))
>>> c = torch.stack((a, b))
>>> a.size(), b.size(), c.size()
(torch.Size([2, 3]), torch.Size([2, 3]), torch.Size([2, 2, 3]))
可以看到c是三维的,比a、b多了一维。