pytorch里面的nn库:torch.nn.modules、torch.nn.functional、torch.nn.parameter、torch.nn.Sequential

torch.nn是专门为神经网络设计的模块化接口
torch.nn构建与autograd之上,可以用来定义和运行神经网络

介绍一下四大库:torch.nn.modules、torch.nn.functional、torch.nn.parameter、torch.nn.Sequential

torch.nn.modules

************torch.nn.modules*************
torch.nn.MSELoss
torch.nn.CrossEntropyLoss 
torch.nn.Conv2d # 封装的是卷积神经网络层
torch.nn.Embedding
torch.nn.LSTM
torch.nn.Linear
torch.nn.dropout
torch.nn.LeakyReLU

封装的每一层就是一个模块
// An highlighted block
var foo = 'bar';
// An highlighted block
var foo = 'bar';

torch.nn.functional

************torch.nn.functional************
torch.nn.functional.conv2d
torch.nn.functional.embedding
torch.nn.functional.bilinear

torch.nn.functional & torch.nn.modules有什么区别?

torch.nn.functional & torch.nn.modules有什么区别?

1) 类型不同:torch.nn.functional是函数,torch.nn.modules是类
函数:只是进行简单的 数学运算而已。functional中的函数是一个确定的不变的运算公式,输入数据产生输出就ok,
类:会自动提取可学习的参数 深度学习中会有很多权重是在不断更新的,不可能每进行一次forward就用新的权重重新来定义一遍函数来进行计算,
所以说就会采用类的方式,以确保能在参数发生变化时仍能使用我们之前定好的运算步骤。

2) 如果模型有可学习的参数,最好使用nn.Module对应的相关layer,否则二者都可以使用,没有什么区别:
比如此例中的Relu其实没有可学习的参数,只是进行一个运算而已,所以使用的就是functional中的relu函数, 而卷积层和全连接层都有可学习的参数,
所以用的是nn.Module中的类。 不具备可学习参数的层,将它们用函数代替,这样可以不用放在构造函数中进行初始化。

3) nn.functional.xxx 需要自己定义 weight,每次调用时都需要手动传入 weight,而 nn.xxx 则不用,举例如下

示例:

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

# torch.nn 定义的CNN
class CNN(nn.Module):
    def __init__(self):
        super(CNN, self).__init__()

        self.conv_1 = nn.Conv2d(1, 16, krenel_size=5, padding=0)
        self.relu_1 = nn.ReLU(inplace=True)
        self.maxpool_1 = nn.MaxPool2d(kernel_
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值