pytorch卷积网络示例和参数设置介绍

以下是我建立的一个简单卷积网络用于识别Minist数据集:

class My_nn_s(nn.Module):
    def __init__(self):
        super(My_nn_s, self).__init__()
        self.model = nn.Sequential(nn.Conv2d(in_channels=1, out_channels=30, kernel_size=5, padding=0, stride=1),
                                   nn.ReLU(),
                                   nn.MaxPool2d(2, 2, 0),
                                   nn.Flatten(),
                                   nn.Linear(4320, 100),
                                   nn.ReLU(),
                                   nn.Linear(100, 10),
                                   )

    def forward(self, x):
        x = self.model(x)
        return x

网络的结构为:

1、卷积层

2、Relu层

3、Max池化层

4、仿射层

5、Relu层

6、仿射层

需要注意的是,在池化层到仿射层之间有一个Flatten用于将数据展平。

这里是分类问题,输出层一般为Softmanx层并选择交叉熵误差。在Pytorch中,这两个层被打包定义在损失函数中(nn.CrossEntropyLoss)。

下面分别对各层参数进行介绍:

首先是卷积层

由于Minist是黑白照片,没有颜色信息(RGB),输入数据的形状为(N,C,H, W)=(100,1,28,28)这里的C=1,即in_channels = 1, 输入通道数为1(只有一个数字表示灰度,如果是彩色照片则需要3个通道,3个数字分别表示RGB三个灰度);一个batch_size为100(人为确定,卷积层中没有定义,而是在加载数据集时定义batch_size的大小 DataLoader(data_train, batch_size=100)),所以N=100;图片大小为28*28, 所以H=W=28。本例设置out_channels = 30,即卷积核的数量FN = 30,这个参数人为确定,为超参数,这个值会更新为卷积后结果的通道C=FN。卷积核为方阵,即kernel_size=5, 也可是设置为kernel_size=(5, 5), 填充pad=0, 步长为1。因此卷积核的形状(FN, C, FH, FW)=(30, 1, 5, 5)。

对于卷积后的输出形状OH和OW可用下面公式进行计算

OH =1+ (H + 2*pad - FH)/stride

OW = 1+(W + 2*pad - FW)/stride

带入得到OH=OW=1+(28-5)/1=24

所以经过第一层卷积计算后的形状为(N, C, OH, OW)=(100, 30, 24, 24),如上所述,输出的C等于卷积核的数量FN

Relu层不改变形状,所以传递给后面Max池化的形状也是(100, 30, 24, 24)

Max池化层不改变通道数,但是会改变输出图片形状(OH,OW),计算公式为

OH = 1+(H + 2*pad - PH)/stride

OW = 1+(W + 2*pad - PW)/stride

这里PH(卷积核的高)=PW(卷积核的宽)=2, stride=2, pad=0

代入得到OH=OW=1+(24+2*0-2)/2=12

所以经过池化层后的输出形状为(100, 30, 12, 12)

nn.Flatten()是把数据展平,得到输出形状为(N, C*OH*OW) = (100, 4320)

第一个仿射层的输入维度为上一层输出层维度即4320,而这里仿射层输出为人为确定,这里定为100。在经过第一个仿射层后的输出形状为(N, 100)=(100, 100)

Relu层不改变形状,所以传递给后面仿射层的形状也是(100,100)

对于最后一个仿射层,Minist是数据集是对手写10个数字的识别,因此输出为10,输入则为100

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PyTorch中的卷积循环神经网络(Convolutional Recurrent Neural Network,CRNN)是一种结合了卷积神经网络(Convolutional Neural Network,CNN)和循环神经网络(Recurrent Neural Network,RNN)的模型。它在计算机视觉任务中表现出色,特别适用于图像文本识别(Image Text Recognition)任务。 CRNN的基本结构包括卷积层(Convolutional Layer)、循环层(Recurrent Layer)和全连接层(Fully Connected Layer)三个部分。其中,卷积层用于提取图像特征,循环层用于处理序列信息,全连接层用于输出分类结果。 在PyTorch中,可以使用nn.Module类来构建CRNN模型。可以通过组合nn.Conv2d、nn.GRU和nn.Linear等模块来搭建CRNN的网络结构。具体而言,可以使用nn.Conv2d进行卷积操作,然后使用nn.GRU对序列进行处理,最后使用nn.Linear进行分类。 以下是一个简单的示例代码,展示了如何使用PyTorch构建一个简单的CRNN模型: ```python import torch import torch.nn as nn class CRNN(nn.Module): def __init__(self, num_classes): super(CRNN, self).__init__() self.conv = nn.Conv2d(1, 64, kernel_size=3, stride=1, padding=1) self.rnn = nn.GRU(64, 128, bidirectional=True) self.fc = nn.Linear(128, num_classes) def forward(self, x): x = self.conv(x) x = torch.squeeze(x, 2) x = torch.transpose(x, 1, 2) x, _ = self.rnn(x) x = self.fc(x[:, -1, :]) return x # 创建CRNN模型 num_classes = 10 crnn = CRNN(num_classes) # 使用模型进行前向传播 input = torch.randn(1, 1, 32, 32) # 假设输入尺寸为(1, 32, 32) output = crnn(input) ``` 这只是一个简单的示例,实际中的CRNN模型可能会更复杂,具体的网络结构和参数设置取决于具体的任务和数据集。希望以上的信息能对你有所帮助!如有其他问题,请继续提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值