自定义层

class CenteredLayer(nn.Module):
    def __init__(self):
        super().__init__()
    def forward(self,x):
        return x-x.mean()
# layer=CenteredLayer()
# print(layer(torch.FloatTensor([1,2,3,4])))
net=nn.Sequential(nn.Linear(8,128),CenteredLayer())
#作为额外的健全性检查,我们可以在向该网络发送随机数据后,检查均值是否为0。
Y = net(torch.rand(4, 8))
print(Y.mean())

带参数的层
定义具有参数的层, 这些参数可以通过训练进行调整。 我们可以使用内置函数来创建参数,这些函数提供一些基本的管理功能。

class MyLinear(nn.Module):
    def __init__(self,in_units,units):
        super().__init__()
        self.weight = nn.Parameter(torch.randn(in_units, units))
        self.bias = nn.Parameter(torch.randn(units, ))

    def forward(self, X):
        linear = torch.matmul(X, self.weight.data) + self.bias.data
        return F.relu(linear)

linear = MyLinear(5, 3)
print(linear.weight)
#我们可以使用自定义层直接执行前向传播计算
print(linear(torch.rand(2, 5)))

你可能感兴趣的:(深度学习,python,深度学习,开发语言)