1. 介绍
在PyTorch中,Sequential是一个模型容器。它是一个用于顺序排列神经网络模块(如层、激活函数等)的容器。通过使用Sequential,可以将多个模块按照顺序连接在一起,构建一个深度神经网络模型。
使用Sequential时,可以将每个模块按照顺序添加到Sequential容器中。每个模块都可以是一个单独的层、激活函数等。Sequential将按照添加的顺序依次执行这些模块,将输入数据传递给第一个模块,然后将输出作为下一个模块的输入,依次传递下去,直到最后一个模块。输出最后一个模块的输出即为整个Sequential模型的输出。
2. 特性
Sequential的主要优点是简单易用。通过将不同的模块按照顺序组合在一起,不需要手动定义前向传播函数,可以直接调用Sequential实例进行前向传播。它也有一些限制,如无法处理具有分支或跳跃连接的模型结构,仅适用于顺序连接的模型。
3. 使用
CIFA10 的模型实现:
注意: 为了保持 卷积后前后输出的 tensor 的 H 与 W 相同,需要公式进行计算。
注意:
1. Feature Maps 之后 需要 Flatten,之后通过 Linear 后,才可以到达 Hidden units,再经过 Linear 之后,才可以 Outputs
import torch.nn
from torch import nn
from torch.nn import Conv2d, MaxPool2d, Flatten, Linear, Sequential
from torch.utils.tensorboard import SummaryWriter
class myModule(nn.Module):
def __init__(self):
super(myModule, self).__init__()
# self.conv1 = Conv2d(3,32,5,padding=2)
# self.maxpool1 = MaxPool2d(2)
# self.conv2 = Conv2d(32, 32, 5, padding=2)
# self.maxpool2 = MaxPool2d(2)
# self.conv3 = Conv2d(32, 64, 5, padding=2)
# self.maxpool3 = MaxPool2d(2)
#
# self.flatten = Flatten() # 展平
# self.linear1 = Linear(1024,64)
# self.linear2 = Linear(64,10)
self.module1 = Sequential(
Conv2d(3, 32, 5, padding=2),
MaxPool2d(2),
Conv2d(32, 32, 5, padding=2),
MaxPool2d(2),
Conv2d(32, 64, 5, padding=2),
MaxPool2d(2),
Flatten(), # 展平
Linear(1024, 64),
Linear(64, 10)
)
def forward(self,x):
# x = self.conv1(x)
# x = self.maxpool1(x)
# x = self.conv2(x)
# x = self.maxpool2(x)
# x = self.conv3(x)
# x = self.maxpool3(x)
#
# x = self.flatten(x)
# x = self.linear1(x)
# x = self.linear2(x)
x = self.module1(x)
return x
"""
myModule(
(conv1): Conv2d(3, 32, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2))
(maxpool1): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
(conv2): Conv2d(32, 32, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2))
(maxpool2): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
(conv3): Conv2d(32, 64, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2))
(maxpool3): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
(flatten): Flatten(start_dim=1, end_dim=-1)
(linear1): Linear(in_features=1024, out_features=64, bias=True)
(linear2): Linear(in_features=64, out_features=10, bias=True)
)
"""
myModule_1 = myModule()
print(myModule_1)
input = torch.ones((64,3,32,32))
output = myModule_1(input)
"""
torch.Size([64, 10])
"""
print(output.shape)
write = SummaryWriter("logs")
write.add_graph(myModule_1,input)
write.close()
结果:
标签:32,self,padding,Pytorch,Sequential,64,Conv2d From: https://blog.csdn.net/SILVERCROWNAGE/article/details/141352508