在pytorch中,tensor是基于numpy与array的。内存共享。
在pythorch中,自定义层是继承nn.Module。将层与模型看成是模块,层与模型堪称模块,两者之间没有明确界限,定义方式与定义模型一样_init_与forward。
1、先定义全连接层,训练参数的定义是nn.Parameter,直接使用torch。tensor无法在#5中遍历到;
2、输入计算loss,反向传播计算参数梯度;
3、输出完成反向传播后层参数梯度。
# 导入pytorch库
import torch
# 从torch库中导入nn模块,是PyTorch中用于构建神经网络的模块,它包含了一系列用于构建神经网络层的类和函数。
from torch import nn
class CLD(nn.Module): # 定义了CLD的类,继承nn.Module.。CLD类代表简单的自定义层,实现全连接层。
def __init__(self,in_n,out_n):
super().__init__() # 初始化权重参数
self.w = nn.Parameter(torch.normal(0, 0.01, size=[in_n, out_n]), requires_grad=True)# 权重参数w是一个[in_n, out_n]的二维张量,是一个付出(0,0.01的正太分布)
self.b = nn.Parameter(torch.normal(0, 0.01, size=[out_n]), requires_grad=True)
def forward(self, in_n, out_n):
super().__init__()
x = torch.matual(inputs, self.w)
x= x + b
return x
layer = CLD(2, 3)
y = layer(torch.ones(100, 2))
loss = torch.sum(y)
loss.backward()
for i in layer.parameters():
print(i.grad)