《动手学深度学习》(PyTorch版)代码注释 - 15 【Custom_layer】

说明

本博客代码来自开源项目:《动手学深度学习》(PyTorch版)
并且在博主学习的理解上对代码进行了大量注释,方便理解各个函数的原理和用途

配置环境

使用环境:python3.8
平台:Windows10
IDE:PyCharm

此节说明

此节对应书本上4.4节
此节功能为:自定义层
由于此节相对容易理解,代码注释量较少

代码

# 本书链接https://tangshusen.me/Dive-into-DL-PyTorch/#/chapter03_DL-basics/3.8_mlp
# 4.4节
#注释:黄文俊
#邮箱:hurri_cane@qq.com



import torch
from torch import nn


# 4.4.1 不含模型参数的自定义层
# class CenteredLayer(nn.Module):
#     def __init__(self, **kwargs):
#         super(CenteredLayer, self).__init__(**kwargs)
#     def forward(self, x):
#         return x - x.mean()
#
# layer = CenteredLayer()
# print(layer(torch.tensor([1, 2, 3, 4, 5], dtype=torch.float)))
#
# net = nn.Sequential(nn.Linear(8, 128), CenteredLayer())
# # print(torch.rand(4, 8))       #生成4行8列的随机数(数值在0-1之间)
# y = net(torch.rand(4, 8))
# print(y.mean().item())


# 4.4.2 含模型参数的自定义层
class MyListDense(nn.Module):
    def __init__(self):
        super(MyListDense, self).__init__()
        self.params = nn.ParameterList([nn.Parameter(torch.randn(4, 4)) for i in range(3)])
        self.params.append(nn.Parameter(torch.randn(4, 1)))

    def forward(self, x):
        for i in range(len(self.params)):
            x = torch.mm(x, self.params[i])
        return x
net1 = MyListDense()
print(net1)


class MyDictDense(nn.Module):
    def __init__(self):
        super(MyDictDense, self).__init__()
        self.params = nn.ParameterDict({
                'linear1': nn.Parameter(torch.randn(4, 4)),
                'linear2': nn.Parameter(torch.randn(4, 1))
        })
        self.params.update({'linear3': nn.Parameter(torch.randn(4, 2))}) # 新增

    def forward(self, x, choice='linear1'):
        return torch.mm(x, self.params[choice])

net2 = MyDictDense()
print(net2)

x = torch.ones(1, 4)
print(net2(x, 'linear1'))
print(net2(x, 'linear2'))
print(net2(x, 'linear3'))


net = nn.Sequential(
    MyDictDense(),
    MyListDense(),
)
print(net)
print(net(x))




print("*"*30)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hurri_cane

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值