import torch
import torchvision
from torch import nn
from torch.nn import Conv2d
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter
dataset =torchvision.datasets.CIFAR10(
'./data',
train=False,
transform =torchvision.transforms.ToTensor(),
download=True
)
dataloader =DataLoader(dataset,batch_size=64)
class Tudui(nn.Module):
def __init__(self):
super().__init__()
self.conv1=Conv2d(in_channels=3,out_channels=6,kernel_size=3,stride=1,padding=0)
def forward(self,x):
x=self.conv1(x)
return x
tudui=Tudui()
writer =SummaryWriter('logs/p18')
step=0
for data in dataloader:
imgs,targets=data
output =tudui(imgs)
writer.add_images('input',imgs,step)
output=torch.reshape(output,(-1,3,30,30))
writer.add_images('output',output,step)
step+=1
if step>5:
break
writer.close()
print('完成')
1.Conv2d:Conv2d 是 2D Convolution(二维卷积) 的缩写,是用一个"小窗口"在图片上滑动,提取局部特征。
2.CIFAR10:
| CIFAR | 加拿大高等研究院(Canadian Institute For Advanced Research),这个数据集就是他们整理的 |
| 10 | 有 10 个类别 |
数据集长什么样
| 图片数量 | 60000 张 |
| 图片尺寸 | 32×32 像素(很小) |
| 颜色 | RGB 彩色 |
| 类别数 | 10 个 |
| 训练集 | 50000 张 |
| 测试集 |
10000 张 |
3.train=False,
transform =torchvision.transforms.ToTensor(),
train:True是训练集,False是测试集
torchvision.transforms.ToTensor(),把图片张量化,
| 像素值:0~255 | 像素值:0~1(自动归一化) |
4.dataloader =DataLoader(dataset,batch_size=64),所有图片64个分成一组
5.self.conv1=Conv2d(in_channels=3,out_channels=6,kernel_size=3,stride=1,padding=0)
进行卷积操作,n_channels=3,out_channels=6,输入通道是3,输出通道是6
输入三个通道是RGB三原色,输出的6个通道是用6个卷积核提取的6个特征
kernel_size=3:卷积核是3*3,注意:卷积核也可以是长方形,比如识别人的时候长方形可能更好用,
stride=1:步长是1,意思是卷积核从左到右,从上到下每次动一格扫描完整个图片
padding=0:
例如
原图:5×5
text
[1][2][3][4][5]
[6][7][8][9][10]
[11][12][13][14][15]
[16][17][18][19][20]
[21][22][23][24][25]
如果 padding=0,意思是不填充边缘,那么卷积核3*3只能存在
7 , 8, 9,
12,13,14,
17,18,19的位置
这么说不准确,但我理解就是卷积核中心只能在这9个位置,原来5*5的图片会变成3*3
如果padding=1,那么
填充后的图片:7×7
[0][0][0][0][0][0][0]
[0][1][2][3][4][5][0]
[0][6][7][8][9][10][0]
[0][11][12][13][14][15][0]
[0][16][17][18][19][20][0]
[0][21][22][23][24][25][0]
[0][0][0][0][0][0][0]
卷积核中心就可以取到1到25,这样卷积后图片大小不变,图片也不丢失信息
6.for data in dataloader:
imgs,targets=data
dataloader是迭代器,总共10000张图片,一次给你一组64张图片,data就是其中一组
# imgs: [64, 3, 32, 32] ← 64张图,3通道RGB,像素32*32
# targets: [64] ← 64个标签
7.output =tudui(imgs)
writer.add_images('input',imgs,step)
output=torch.reshape(output,(-1,3,30,30))
writer.add_images('output',output,step)
output =tudui(imgs), 把64张图片放进卷积网络
writer.add_images('input',imgs,step),原图片在tensorboard上显示
output=torch.reshape(output,(-1,3,30,30)),改变形状,正常输出是
# 输入:imgs.shape = [64, 3, 32, 32]
# 经过卷积:Conv2d(3→6, 3×3, stride=1, padding=0)
# 输出:output.shape = [64, 6, 30, 30]
由于padding=0,卷积核没法扫描边缘,所以上下左右像素丢失一行,成了30*30
tensorboard只能输出3通道,所以reshape=3,
-1是让pytorch自己算,保证图片大小一致,一张图片 = 通道数 × 每个通道的大小,这道题中-1就是128

![pip install安装markitdown时出现ERROR: ‘packages/markitdown[all]‘ is not a valid editable requirement解决方案-171主机测评](https://www.171host.com/wp-content/uploads/2026/08/20260823004656-6a8a430045592-220x150.png)
![pip install安装markitdown时出现ERROR: ‘packages/markitdown[all]‘ is not a valid editable requirement解决方案-171主机测评](https://www.171host.com/wp-content/uploads/2026/08/20260823004339-6a8a423bd3e97-220x150.png)
