最近忙着写论文,今天更新Pytorch深度学习:搭建小实战和Sequential。
import torch
from tensorboardX import SummaryWriter
from torch import nn
from torch.nn import Conv2d, MaxPool2d, Flatten, Linear, Sequential
class Yang(nn.Module):
def __init__(self):
super(Yang, self).__init__()
# Sequential模块可以按照顺序添加其他的模块
self.model1 = Sequential(
# Conv2d是卷积层,输入为3通道的图像,输出为32个特征图,卷积核大小为5x5,padding为2
Conv2d(3, 32, 5, padding=2),
# MaxPool2d是池化层,将特征图尺寸缩小一半
MaxPool2d(2),
Conv2d(32, 32, 5, padding=2),
MaxPool2d(2),
Conv2d(32, 64, 5, padding=2),
MaxPool2d(2),
# Flatten是将多维的输入压缩成一维的输出
Flatten(),
# Linear是全连接层,输入为1024维,输出为64维
Linear(1024, 64),
Linear(64, 10)
)
def forward(self, x):
# 将输入x经过model1进行前向传播操作
x = self.model1(x)
return x
# 创建一个Yang类的实例
yang = Yang()
print(yang)
# 创建一个大小为(64, 3, 32, 32)的张量作为输入
input = torch.ones((64, 3, 32, 32))
# 使用yang对输入进行前向传播操作,得到输出
output = yang(input)
print(output.shape)
# 创建一个SummaryWriter对象,用于将训练过程中的计算图和事件记录保存到TensorBoard日志文件中
writer = SummaryWriter("../logs_seq")
# 将计算图添加到SummaryWriter
writer.add_graph(yang, input)
# 关闭SummaryWriter
writer.close()
该代码定义了一个名为`Yang`的类,该类继承自`nn.Module`,并实现了前向传播方法。在`Yang`类的构造函数中,使用`Sequential`模块按顺序构建了一个卷积神经网络模型`model1`。`model1`包含多个卷积层、池化层和全连接层,用于对输入的图像数据进行特征提取和分类。在前向传播方法中,将输入数据`x`经过`model1`进行前向传播操作,得到输出结果`x`。然后,创建了一个`Yang`类的实例`yang`,并对输入数据进行前向传播,输出结果的形状。最后,创建了一个`SummaryWriter`对象,将计算图和事件记录添加到TensorBoard日志文件中,并关闭`SummaryWriter`。