nn.Conv2d(二)

**前置知识:

1、nn.Conv2d和torch.nn.functional.conv2d的对比:

nn.Conv2d(能自主学习,更新调整卷积核)

  • 模块:可以看作是一个"卷积层",用在神经网络里。
  • 定义一次,用多次:你只需设置好参数(比如输入通道、输出通道、卷积核大小),然后在每次前向传播时直接用它。
  • 自动管理:这个模块会自动保存和更新卷积的权重(参数),你只需关注模型的整体结构。

torch.nn.functional.conv2d(一次性使用,卷积核的参数需要人为给好给全)

  • 函数:可以想象成一个工具,用来执行一次性的卷积操作。
  • 灵活使用 :每次使用时都要提供所有需要的参数,比如输入数据、卷积核的权重和偏置。
  • 无状态:这个函数不会保存卷积的参数,所以你得自己管理这些。

2、self.conv_1 = Conv2d(in_channels=3, out_channels=6, kernel_size=3, stride=1, padding=0)

定义了一个卷积层,输入为 3 通道的图像,经过 3x3 的卷积核处理后,输出 6 通道的特征图

in_channels=3

  • 输入通道数:这里设置为 3,表示输入的图像有 3 个通道(例如 RGB 彩色图像)。每个通道对应图像中的一种颜色。

out_channels=6

  • 输出通道数:设置为 6,表示该卷积层会输出 6 个通道的特征图。这意味着卷积层会学习到 6 种不同的特征。

kernel_size=3

  • 卷积核大小:设置为 3,表示卷积核的尺寸为 3x3 像素。卷积核在输入图像上滑动,进行局部特征的提取。

stride=1

  • 步幅:设置为 1,表示卷积核每次滑动一个像素。步幅越小,输出特征图的尺寸越大。

padding=0

  • 填充:设置为 0,表示不对输入图像进行填充。没有填充会使输出特征图的尺寸减小。

**代码:

加载数据集------>数据Loader处理------>创建新神经网络模型(继承nn.Module并重写方法)------>数据输入reshape成4维度张量------>使用该模型进行计算------>数据结果reshape成3通道------>tensorboard记录

python 复制代码
import torch
import torchvision
from torch.nn import Conv2d
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter

test_set=torchvision.datasets.CIFAR10(root="./dataset",train=False,transform=torchvision.transforms.ToTensor(),download=True)

dataloader=DataLoader(test_set,batch_size=64)

class Xigua(nn.Module):
    def __init__(self):
        super().__init__()
        self.conv_1=Conv2d(in_channels=3,out_channels=6,kernel_size=3,stride=1,padding=0)

    def forward(self,input):
        output=self.conv_1(input)
        return output

xigua1=Xigua()
print(xigua1)
#Xigua((conv_1): Conv2d(3, 6, kernel_size=(3, 3), stride=(1, 1)))

writer=SummaryWriter("logs1")
step=0
for data in dataloader:
    imgs,targets=data
    output=xigua1(imgs)
    print(imgs.shape) #torch.Size([64, 3, 32, 32])
    print(output.shape) #torch.Size([64, 6, 30, 30])
    #需要reshape,使其变为3通道,才能使add_imgs生效,torch.Size([64, 6, 30, 30])------------>torch.Size([***, 3, 30, 30])
    output=torch.reshape(output,(-1,3,30,30)) #-1是一个占位符,表示让pytorch自动计算该维度的大小
    writer.add_images("test_Conv2d",output,step,dataformats="NCHW")
    writer.add_images("start",imgs,step,dataformats="NCHW")
    step=step+1
    if step>=10:
        break
writer.close()


# AssertionError: assert I.ndim == 4 and I.shape[1] == 3
相关推荐
“AI国潮设计-小江”2 小时前
【AIGC实战】Python+SDXL批量生成“潮汕英歌舞不倒翁”IP | 角色一致性与多场景融合方案,附完整代码
开发语言·人工智能·python·prompt·aigc
CCC:CarCrazeCurator2 小时前
稀疏奖励 vs 稠密奖励:强化学习中的反馈带宽权衡
人工智能·深度学习·机器人
Linux_cy2 小时前
服务器管理工具哪个好用?我用了七八个
运维·服务器·javascript·python·ssh·面板·gmssh
MoRanzhi12032 小时前
第6篇(下)· 使用 PyQt5 实现 2048 高性能计算版:统一运行控制与跨模式安全交接
python·pyqt·进程管理·状态机·软件架构·并发控制·数据一致性
code tsunami2 小时前
【无标题】
开发语言·python
CodeGL3 小时前
10、Python基础之进程和线程
开发语言·python
TechWayfarer4 小时前
PHP漏洞被利用,怎么揪出攻击IP?
开发语言·python·tcp/ip·网络安全·php
陈 洪 伟5 小时前
Transformer彻底剖析(9):归一化演进——BatchNorm、LayerNorm、RMSNorm、Post-LN / Pre-LN、DeepNorm
人工智能·深度学习·transformer
Kari115 小时前
AI 手写 OCR 在教育场景的工程化:为什么准确率从 82% 做到 99% 这么难
人工智能·深度学习·机器学习
数聚天成DeepSData5 小时前
两批标注数据合并前要核对什么
人工智能·深度学习·机器学习·数据集·deepsdata