下面的CenteredLayer类要从其输入中减去均值。要构建它,我们只需继承基础层类并实现正向传播功能
import torch
import torch.nn.functional as F
from torch import nn
class CenteredLayer(nn.Module):
def __init__(self):
super().__init__()
def forward(self, X):
return X - X.mean()
初始化数据查看该层能否正常工作
layer = CenteredLayer() layer(torch.FloatTensor([1,2,3,4,5]))
将该层作为组件合并到构建更复杂的模型中
net = nn.Senquential(nn.Linear(8,128),CenteredLayer())
健全性检查:向网络发送随机数据后,检查均值是否为0。由于我们处理的是浮点数,因为存储精度的原因,我们仍然可能会看到一个非常小的非零数
Y = net(torch.rand(4, 8)) Y.mean()带参数的层
定义一个带参数的层并用内置的函数进行初始化,使用ReLU作为激活函数,
Class MyLinear(nn.Model):
def __init__(self,in_units,units):
super().__init__()
self.weight = nn.Parmeter(torch.randn(in_units,units))
self.bias = nn.Parameter(torch.randn(units,))
def forward(self,X):
linear = torch.matual(X,self.weight.data)+self.bias.data
return F.relu(linear)
接下来实例化MyLinear类并访问其模型参数
linear = MyLinear(5,3) linear.weight
可以使用自定义层构建模型。我们可以像使用内置的全连接层一样使用自定义层
net = nn.Sequential(MyLinear(64, 8), MyLinear(8, 1)) net(torch.rand(2, 64))



