适合入门深度学习的项目!!!搭建LeNet-5网络模型——1 网络模型搭建

该代码示例展示了如何在PyTorch中构建一个LeNet-5模型,包括卷积层(Conv2d)、Sigmoid激活函数、平均池化(AvgPool2d)和线性层(Linear)。网络设计包含多个卷积和池化步骤,最后通过全连接层进行分类。
摘要由CSDN通过智能技术生成

目标模型:

含详细注释的代码如下:
 

import torch
from torch import nn

# 定义一个网络模型
class MyLeNet(nn.Module):
    # 初始化网络
    def __init__(self):
        super(MyLeNet,self).__init__()
        # 卷积层:输入灰度图——输入通道大小是1; 设定输出通道大小是6;约定卷积核大小是5*5;
        # N = (W - F + 2P) / S + 1
        # 其中N: 输出大小(目标:28)  w: 输入大小(28)  F: 卷积核大小(5)  P: 填充值的大小(这里设为0)  s: 步长大小(设为1)
        # [(28-5+4) / 1] + 1 = 28
        self.c1 = nn.Conv2d(in_channels=1,out_channels=6,kernel_size=5,padding=2)
        # 定义激活函数
        self.Sigmoid = nn.Sigmoid()
        # 使用平均池化定义一个池化层——不改变通道大小,但是改变特征图片的窗口大小
        # 池化后是14*14    [(28-2+0) / 2] + 1 = 14
        self.s2 = nn.AvgPool2d(kernel_size=2,stride=2)
        self.c3 = nn.Conv2d(in_channels=6,out_channels=16,kernel_size=5)
        self.s4 = nn.AvgPool2d(kernel_size=2, stride=2)
        self.c5 = nn.Conv2d(in_channels=16,out_channels=120,kernel_size=5)
        # 展开
        self.flatten = nn.Flatten()
        # 线性连接层
        self.f6 = nn.Linear(120,84)
        self.output = nn.Linear(84,10)

    # 传播这个网络。我们继承了nn.Module这个类,这里是在重写forward函数实现
    def forward(self,x):
        # 用Sigmoid激活一下c1
        x = self.Sigmoid(self.c1(x))
        # 通过池化层
        x = self.s2(x)
        # 后面重复这些动作
        x = self.Sigmoid(self.c3(x))
        x = self.s4(x)
        x = self.Sigmoid(self.c5(x))
        x = self.flatten(x)
        x = self.f6(x)
        x = self.output(x)
        return x

if __name__ == "__main__":
    x = torch.rand([1,1,28,28])
    model = MyLeNet()
    y = model(x)



参考:B站视频:从0开始撸代码--手把手教你搭建LeNet-5网络模型

LeNet-5神经网络 C源代码,这个写的比较好,可以用gcc编译去跑,结合理论可以对深度学习有更深刻的了解 介绍 根据YANN LECUN的论文《Gradient-based Learning Applied To Document Recognition》设计的LeNet-5神经网络,C语言写成,不依赖任何第三方库。 MNIST手写字符集初代训练识别率97%,多代训练识别率98%。 DEMO main.c文件为MNIST数据集的识别DEMO,直接编译即可运行,训练集60000张,测试集10000张。 项目环境 该项目为VISUAL STUDIO 2015项目,用VISUAL STUDIO 2015 UPDATE1及以上直接打开即可编译。采用ANSI C编写,因此源码无须修改即可在其它平台上编译。 如果因缺少openmp无法编译,请将lenet.c中的#include和#pragma omp parallel for删除掉即可。 API #####批量训练 lenet: LeNet5的权值的指针,LeNet5神经网络的核心 inputs: 要训练的多个图片对应unsigned char二维数组的数组,指向的二维数组的batchSize倍大小内存空间指针。在MNIST测试DEMO中二维数组为28x28,每个二维数组数值分别为对应位置图像像素灰度值 resMat:结果向量矩阵 labels:要训练的多个图片分别对应的标签数组。大小为batchSize batchSize:批量训练输入图像(二维数组)的数量 void TrainBatch(LeNet5 *lenet, image *inputs, const char(*resMat)[OUTPUT],uint8 *labels, int batchSize); #####单个训练 lenet: LeNet5的权值的指针,LeNet5神经网络的核心 input: 要训练的图片对应二维数组 resMat:结果向量矩阵 label: 要训练的图片对应的标签 void Train(LeNet5 *lenet, image input, const char(*resMat)[OUTPUT],uint8 label); #####预测 lenet: LeNet5的权值的指针,LeNet5神经网络的核心 input: 输入的图像的数据 labels: 结果向量矩阵指针 count: 结果向量个数 return 返回值为预测的结果 int Predict(LeNet5 *lenet, image input, const char(*labels)[LAYER6], int count); #####初始化 lenet: LeNet5的权值的指针,LeNet5神经网络的核心
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值