pytorch-模型的创建

1.模型的创建步骤

模型 nn.Model
模型创建
权值初始化
构建网络层
拼接网络层
卷积层-池化层-激活函数-全连接层
LeNet-AlexNet-ResNet等
均匀分布-正态分布-Kaiming-Xavier

2.模型构建的要素

模型构建两要素
构建子模块
拼接子模块
forward函数
__init__层

3.python实现LeNet模型

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


class LeNet(nn.Module):
    def __init__(self, classes):
        super(LeNet, self).__init__()
        self.conv1 = nn.Conv2d(3, 6, 5)#cov1
        self.conv2 = nn.Conv2d(6, 16, 5)#cov2
        self.fc1 = nn.Linear(16*5*5, 120)
        self.fc2 = nn.Linear(120, 84)
        self.fc3 = nn.Linear(84, classes)

    def forward(self, x):
        out = F.relu(self.conv1(x))
        out = F.max_pool2d(out, 2)
        out = F.relu(self.conv2(out))
        out = F.max_pool2d(out, 2)
        out = out.view(out.size(0), -1)
        out = F.relu(self.fc1(out))
        out = F.relu(self.fc2(out))
        out = self.fc3(out)#得到分类的概率向量,输入classes为2就是2分类
        return out

    def initialize_weights(self):
        for m in self.modules():
            if isinstance(m, nn.Conv2d):
                nn.init.xavier_normal_(m.weight.data)
                if m.bias is not None:
                    m.bias.data.zero_()
            elif isinstance(m, nn.BatchNorm2d):
                m.weight.data.fill_(1)
                m.bias.data.zero_()
            elif isinstance(m, nn.Linear):
                nn.init.normal_(m.weight.data, 0, 0.1)
                m.bias.data.zero_()

4.torch.nn模块简介

torch.nn
nn.Parameter:张量子类-表示可学习参数如weight-bias
nn.Module:所有网络层基类
nn.functional 函数的具体实现-卷积池化全连接什么的
nn.init 参数初始化方法

5.nn.Module总结

1.一个module可以包含多个子module,如LeNet中有conv2d,有pool等都是子module。
2.一个module相当于一个运算,必须实现forward()函数。
3.每个module都有8个字典管理它的属性。
  • parameters:储存管理nn.parameter类,参数weight,bias等在里面
  • modules:储存nn。Module类,这个大模型是由什么模型构成的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值