CNN简单理解+PyTorch示例实现

简介

卷积神经网络(CNN)是常用的神经网络之一,主要用来处理图像数据,但是近来随着对于CNN的创新,也有使用CNN处理文本信息,语音信息的相关工作,这里简单介绍一下自己学习过程中的理解。

相关概念

Feature Map 和 Channel

图像在CNN中的存在形式,可以认为是Feature Map(特征图)的叠加组合。如果图片是灰度图,那么图片的维度为 1*N*N,其中N为图片的高和宽,灰度图只有一个Feature Map,即Channel=1;如果图片是彩色图片,那么图片的维度为3*N*N,代表彩色图片有三个Feature Map,即Channel=3,分别是RGB通道。

卷积核:

卷积核(Kernel),也称过滤器(Filter),是CNN中用来对图像进行特征提取。每个卷积核具有高、宽、深三个属性,其中高和宽代表卷积核的大小,通常情况下高宽相等(常设置为3*3,5*5等),深是由上一层的输入来决定,卷积核的深就是上一层传入的Feature Map的个数,所以只需要指定卷积核的长宽即可。

每层卷积层可以设置多个卷积核,有几个卷积核,就会输出几个Feature Map。

卷积核运算过程:

 

以上图为例,我们的原始输入图片是6*6的彩色图片,所以其维度为3*6*6(通道数*高*宽),我们使用一个卷积核,卷积核的高宽为3,因为输入图片的Channel为3,所以卷积核的深度为3 。卷积核的深度和输入图片的Channel一一对应,也就是说卷积核中深度1st提取Channel 1st的特征(对应到图片中,第一个黄色的卷积核提取图片红色通道的特征,以此类推),之后将三张新得到的Feature Map进行算术求和,得到一张Feature Map,也就是等式右边的4*4矩阵(关于输出的矩阵大小,下面进行介绍)。

所以,无论输入的图片的Channel是多少,经过一个卷积核的操作之后,都会得到一张深度为1的Feature Map,在卷积层中设置多少个Filter,卷积层输出的Feature Map的深度就是多少。

在实际过程中,我们设置多个不同的卷积核,来提取图像中的特征,是因为对于一张图片,我们希望得到多个角度上的描述(比如图片的背景&#

  • 7
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
PyTorch中,使用CNN网络进行回归任务的实现相对简单。下面是一个基本的CNN回归模型的示例代码: ```python import torch import torch.nn as nn class CNNRegressor(nn.Module): def __init__(self): super(CNNRegressor, self).__init__() self.conv1 = nn.Conv2d(3, 16, kernel_size=3, padding=1) self.pool = nn.MaxPool2d(kernel_size=2, stride=2) self.conv2 = nn.Conv2d(16, 32, kernel_size=3, padding=1) self.fc1 = nn.Linear(32 * 8 * 8, 256) self.fc2 = nn.Linear(256, 1) def forward(self, x): x = self.pool(torch.relu(self.conv1(x))) x = self.pool(torch.relu(self.conv2(x))) x = x.view(-1, 32 * 8 * 8) x = torch.relu(self.fc1(x)) x = self.fc2(x) return x ``` 这是一个包含两个卷积层和两个全连接层的简单CNN回归模型。在这个模型中,输入是一个3通道的图像,输出是一个标量连续值。 接下来,我们可以使用PyTorch的内置损失函数和优化器来训练模型: ```python import torch.optim as optim model = CNNRegressor() criterion = nn.MSELoss() optimizer = optim.SGD(model.parameters(), lr=0.001, momentum=0.9) for epoch in range(10): running_loss = 0.0 for inputs, labels in dataloader: optimizer.zero_grad() outputs = model(inputs) loss = criterion(outputs, labels) loss.backward() optimizer.step() running_loss += loss.item() print(f"Epoch {epoch+1} loss: {running_loss/len(dataset)}") ``` 这里使用了均方误差损失函数(MSELoss)和随机梯度下降优化器(SGD),并在每个epoch中计算损失并更新模型参数。dataloader是一个包含训练数据的PyTorch数据加载器对象。 这个示例代码可以帮助你了解如何在PyTorch中使用CNN网络进行回归任务。当然,具体的实现方式会根据具体的任务和数据集而有所不同。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值