pytorch学习13之自定义层

文章介绍了如何在PyTorch中创建自定义层,包括无参数的CenteredLayer,用于减去输入的均值,以及带参数的MyLinear层,该层实现了线性变换及ReLU激活。通过这些自定义层,可以构建更复杂的神经网络模型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介:

神经网络的灵活性由自定义层实现。通过组合不同的层设计适用于各种任务的框架。或者自己创建一个尚不存在的层时,需要构建自定义层。

1、不带参数的层

  1. 构造一个没有任何参数的自定义层。
    # 构造一个没有任何参数的自定义层
    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()  # 输入减均值,把生成的张量均值变成0
    
    
    # 向该层提供一些数据,验证它是否能按预期工作。
    layer = CenteredLayer()
    print(layer(torch.FloatTensor([1, 2, 3, 4, 5])))
    

    输出:

    tensor([-2., -1.,  0.,  1.,  2.])

  2. 将自定义层作为一个模块,组合到一个大模型中。

2、带参数的层

3、总结


layer = CenteredLayer()
print(layer(torch.FloatTensor([1, 2, 3, 4, 5])))
#将层作为组件合并到构建更复杂的模型中
net = nn.Sequential(nn.Linear(8, 128), CenteredLayer())#由一个线性层(输入八组拥有128个特征的输入)和一个centeredlayer组成
Y = net(torch.rand(4, 8))#生成4组形状和输入一样的矩阵。它是【0,1)之间的均匀分布。
                         #randn是返回一个包含从标准正态分布中抽取的随机数张量。
#print(Y)
print(Y.mean())#计算会有些误差
#带参数的层
class MyLinear(nn.Module):
    def __init__(self, in_units, units):
        super().__init__()
        #torch.randn(in_units, units)表示输出一个“输入乘输出大小”的0-1之间随机分布的矩阵,
        # 然后把它放入nn.parameter中后
        #会把梯度和名字加上
        self.weight = nn.Parameter(torch.randn(in_units, units))#调用parameter类就能弄参数。
        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)#输入是5组,输出是每组3个,也得输出5组
print(linear.weight)
#使用自定义层直接执行正向传播计算
print(linear(torch.rand(2, 5)))
#使用自定义层构建模型
net = nn.Sequential(MyLinear(64, 8), MyLinear(8, 1))
print(net(torch.rand(2, 64)))#rand的第二个参数要和第一层的输入一样,也就是和“MyLinear(64, 8)”的64一样

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值