pytorch入门—简单网络的搭建

被逼无奈,越来越多公司需要SLAM和深度学习或者相机结合

import torch
import torch.nn as nn
import torch.nn.functional as F#包含 torch.nn 库中所有函数


class Net(nn.Module):

    def __init__(self):
        super(Net, self).__init__()
        # 1 input image channel, 6 output channels, 5x5 square convolution 通道数就是上图中的切片数
        # kernel
        self.conv1 = nn.Conv2d(1, 6, 5)#输入1通道输出6通道 5*5的卷积核
        self.conv2 = nn.Conv2d(6, 16, 5)#输入6通道输出16通道 5*5的卷积核
        # an affine operation: y = Wx + b 这就是relu激活函数 输出结果为max(0,Wx + b)
        self.fc1 = nn.Linear(16 * 5 * 5, 120)  # 5*5 from image dimension 全连接层 输入为卷积和降采样(池化)后的图片 16通道 5*5大小
        self.fc2 = nn.Linear(120, 84)
        self.fc3 = nn.Linear(84, 10)#对应图片中的全连接层 也就是最后的那一部分

    def forward(self, x):
        # Max pooling over a (2, 2) window
        x = F.max_pool2d(F.relu(self.conv1(x)), (2, 2)) #relu激活 然后进行池化
        # 如果池化平面二维度长度相同 则(2, 2)可以用 2 来替代 如下:
        x = F.max_pool2d(F.relu(self.conv2(x)), 2) #relu激活 然后进行池化
        x = torch.flatten(x, 1) # flatten all dimensions except the batch dimension 推平合并
        x = F.relu(self.fc1(x)) #relu激活
        x = F.relu(self.fc2(x)) #relu激活
        x = self.fc3(x) #relu激活
        return x
        #激活函数是用来加入非线性因素的,提高神经网络对模型的表达能力,解决线性模型所不能解决的问题。 激活函数是对原始数据进行相应的变换,以用同一个模型解决不同的问题。如果说网络是模板,则激活函数则是模板的特化。

net = Net()
print(net)
posted @ 2021-07-14 17:06  Lachiven  阅读(198)  评论(0编辑  收藏  举报