Pytorch神经网络基础——层和块(笔记)

 一。层和块

1.多层感知机

import torch
from torch import nn
from torch.nn import functional as F

net = nn.Sequential(nn.Linear(20, 256), nn.ReLU(), nn.Linear(256, 10))  # 定义网络
X = torch.rand(2, 20)  # 2*20随机矩阵
print(net(X))

输出结果:

tensor([[ 0.0205, -0.0037,  0.0914,  0.1545,  0.1693, -0.1086,  0.0351, -0.1155,
         -0.0167,  0.0730],
        [-0.0184, -0.0351,  0.1344,  0.1300,  0.3674, -0.2407,  0.0150,  0.0474,
         -0.0537,  0.1941]], grad_fn=<AddmmBackward0>)

nn.Sequential构建模型,层的执行顺序是按照参数传递的。nn.Sequential是特殊的Module,维护了有序列表。

net(X)的调用过程:

实际调用的是net.__call__(X)

将列表的每一个块连接在一起,前一个块的输出是后一个快的输入。

2.自定义块包含一个多层感知机,其具有256个隐藏单元的隐藏层和一个10维输出层

 实例化网络net = MLP()

net(X)的执行过程:

执行net.__call__(X)函数,在call函数里面调用forward函数

输出结果:

tensor([[-0.1729, -0.1916,  0.1419,  0.0144, -0.2258, -0.2547,  0.1492,  0.0843,
         -0.0807,  0.1584],
        [-0.1160, -0.0921,  0.2902,  0.0131,  0.0273, -0.1875,  0.0120,  0.0546,
         -0.0591,  0.1023]], grad_fn=<AddmmBackward0>)

3.自己编写Sequential函数:

net=MySequential(nn.Linear(20, 256), nn.ReLU(), nn.Linear(256, 10))

net(X)的执行过程:

①在初始化网络MySequential(nn.Linear(20, 256), nn.ReLU(), nn.Linear(256, 10))时通过构造方法把网络层通过循环添加到链表里

 for idx, module in enumerate(args):

          # 变量_modules中。_module的类型是OrderedDict

            self._modules[str(idx)] = module

 ②net(X):

先调用call函数,然后call方法调用forward方法。

def forward(self, X):
        # OrderedDict保证了按照成员添加的顺序遍历它们
        for block in self._modules.values():
            X = block(X)
        return X

前一个层的输出作为后一个层的输入

4.在正向传播函数执行代码:

 5.混合搭配使用

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值