深度学习基础网络结构代码实现1--CNN

卷积网络模型CNN的实现

结构以及计算

CNN主要包括以下结构:
输入层(Input layer):输入数据;
卷积层(Convolution layer,CONV):使用卷积核进行特征提取和特征映射;
激活层:非线性映射(ReLU)
池化层(Pooling layer,POOL):进行下采样降维;
光栅化(Rasterization):展开像素,与全连接层全连接,某些情况下这一层可以省去;
全连接层(Affine layer / Fully Connected layer,FC):在尾部进行拟合,减少特征信息的损失;
激活层:非线性映射(ReLU)
输出层(Output layer):输出结果。
卷积后shape计算参考我写的:卷积神经网络的计算

inputprocessoutpout
卷积层 1 ∗ 28 ∗ 28 1* 28* 28 12828in_channels=1,out_channels=16
kernel_size=5,stride=1,padding=2
输出长度= 28 + 2 ∗ 2 − 5 + 1 = 28 28+2*2-5+1=28 28+225+1=28
16 ∗ 28 ∗ 28 16*28*28 162828
ReLU 16 ∗ 28 ∗ 28 16*28*28 162828 16 ∗ 28 ∗ 28 16*28*28 162828
MaxPool2d 16 ∗ 28 ∗ 28 16*28*28 162828in_channels=16,out_channels=16
kernel_size=2,strides=2,padding=0
输出长度= ( 28 − 2 + 1 ) / 2 + 1 = 14 (28-2+1)/2+1=14 (282+1)/2+1=14
16 ∗ 14 ∗ 14 16*14*14 161414
卷积层 16 ∗ 14 ∗ 14 16*14*14 161414in_channels=16, out_channels=32
kernel_size=5, stride=1, padding=2
输出长度= 14 + 2 ∗ 2 − 5 + 1 = 14 14+2*2-5+1=14 14+225+1=14
32 ∗ 14 ∗ 14 32*14*14 321414
ReLU 32 ∗ 14 ∗ 14 32*14*14 321414 32 ∗ 14 ∗ 14 32*14*14 321414
MaxPool2d 32 ∗ 14 ∗ 14 32*14*14 321414in_channels=32,out_channels=32
kernel_size=2,strides=2,padding=0
输出长度=$(14-2+1)/2+1=7
32 ∗ 7 ∗ 7 32*7*7 3277
全连接层 32 ∗ 7 ∗ 7 32*7*7 3277 32 ∗ 7 ∗ 7 32*7*7 3277

代码

CNN

import torch
from torch import nn


class CNN(nn.Module):
    def __init__(self):
        super(CNN, self).__init__()
        self.conv1 = nn.Sequential(  # input shape (1, 28, 28)
            nn.Conv2d(
                in_channels=1,  # input height  gray just have one level
                out_channels=16,  # n_filters
                kernel_size=5,  # filter size
                stride=1,  # filter movement/step
                padding=2
            ),  # output shape (16, 28, 28)
            #nn.ReLU(),  # activation
            nn.MaxPool2d(kernel_size=2,stride=2,padding=0),  # choose max value in 2x2 area, output shape (16, 14, 14)
        )
        self.conv2 = nn.Sequential(  # input shape (16, 14, 14)
            nn.Conv2d(16,32, 5, 1, 2),  # output shape (32, 14, 14)
            #nn.ReLU(),  # activation
            nn.MaxPool2d(2,stride=2),  # output shape (32, 7, 7)
        )
        # flatten
        # fc unit
        self.fc1 = nn.Sequential(
            nn.Linear(32*7*7,500),
            #nn.ReLU()
        )
        self.fc2 = nn.Sequential(
            nn.Linear(500,10),
            #nn.ReLU()
        )

    def forward(self, x):
        batchsz = x.size(0)
        x = self.conv1(x)
        x = self.conv2(x)

        x = x.view(batchsz, 50*4*4)

        x= self.fc1(x)
        logits = self.fc2(x)

        # # [b, 10]
        # pred = F.softmax(logits, dim=1)
        # loss = self.criteon(logits, y)

        return logits

在这里插入图片描述

from torchstat import stat
from CNN import CNN

# 导入模型,输入一张输入图片的尺寸
cnn=CNN()
print(cnn)
stat(cnn,(1, 28,28))

在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CNN是卷积神经网络的缩写,是一种深度学习算法。MATLAB是一种高级的计算机语言和环境,常用于科学计算和数据分析。使用MATLAB可以很方便地实现CNN算法。 在MATLAB中实现CNN,需要进行以下步骤: 1. 数据准备:首先,需要准备用于训练和测试的数据集。数据集可以从图像库中获取,也可以通过收集和标记图像来构建自己的数据集。 2. 网络架构设计:决定神经网络的结构,包括输入层、卷积层、池化层、全连接层和输出层等。这些层的参数可以根据具体问题进行调整,例如卷积核的大小、池化窗口的大小等。 3. 模型训练:使用数据集对CNN模型进行训练。通过调整网络参数,使得模型能够适应训练数据并提高精度。训练过程通常包括前向传播、反向传播和参数更新等步骤。 4. 模型评估:使用独立的测试数据对训练得到的模型进行评估。评估指标可以是分类准确率、召回率、精确率等。根据评估结果,可以对模型进行进一步的调整和改进。 在MATLAB中实现CNN,可以使用深度学习工具箱中的相关函数和工具。例如,可以使用convolution2dLayer函数和maxPooling2dLayer函数创建卷积层和池化层,并使用fullyConnectedLayer函数创建全连接层。还可以使用trainNetwork函数进行模型的训练和评估。 总之,在MATLAB中实现CNN,需要进行数据准备、网络架构设计、模型训练和模型评估等步骤。通过使用深度学习工具箱中的函数和工具,可以方便地实现CNN算法,并应用于图像分类、目标检测等问题中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值