今天学习Pytorch深度学习:神经网络-卷积层。
# 导入所需的库
import torch
import torchvision
from torch import nn
import torchvision
from torch.nn import Conv2d
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter
# 下载并加载CIFAR-10数据集
dataset = torchvision.datasets.CIFAR10("dataset", train=False, transform=torchvision.transforms.ToTensor(),
download=True)
# 创建数据加载器
dataloader = DataLoader(dataset, batch_size=64)
# 定义一个自定义的神经网络模型,包含一个卷积层
class Yang(nn.Module):
def __init__(self):
super(Yang, self).__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
# 创建一个Yang类的实例
yang = Yang()
print(yang)
# 创建一个用于记录训练过程的SummaryWriter
writer = SummaryWriter("logs")
step = 0
# 对数据集进行迭代
for data in dataloader:
imgs, targets = data
# 将图像输入模型并获取输出
output = yang(imgs)
# 打印图像和输出的形状
print(imgs.shape)
print(output.shape)
# 将图像和输出添加到TensorBoard中进行可视化
writer.add_images("input", imgs, step)# torch.Size([64, 6, 30, 30])
# 由于 6 个 channel 的图像,是无法显示的,所以,对这个图像进行处理,这里是通过batch_size来调整channel的
output = torch.reshape(output, (-1, 3, 30, 30)) # 这个方法不是很严谨,目的是将 batch_size 降低,当不知道设置为多少合适时,设置为 -1 ,参数会自己计算的
writer.add_images("output", output, step)
# 更新步骤计数器
step = step + 1
这段代码主要实现了以下功能:
- 加载CIFAR-10数据集并创建数据加载器。
- 定义一个简单的卷积神经网络模型。
- 使用模型对数据集中的图像进行卷积操作,并将输入和输出保存到TensorBoard中进行可视化。
- 训练过程中,记录每一步的输入和输出。