编程基础很弱,需要机器学习,学习记录,按自己理解写的,希望以后能学懂吧,要是有大神看到还请赐教。
神经网络-搭建小实战和Sequential的使用
本节课讲解上边这张图的网络构建,和Sequential使用。
首先,第一个为卷积层,输入chanel为3,输出chanel为32,发现输入输出大小不变,翻阅Pytorch文档计算。
代码:
from torch import nn
from torch.nn import Conv2d, MaxPool2d, Flatten, Linear
class Lizi(nn.Module):
def __init__(self):
super(Lizi, self).__init__()
self.conv1 = Conv2d(3, 32, 5, 1, 2)
self.maxpool1 = MaxPool2d(2)
self.conv2 = Conv2d(32, 32, 5, 1, 2)
self.maxpool2 = MaxPool2d(2)
self.conv3 = Conv2d(32, 64, 5, 1, 2)
self.maxpool3 = MaxPool2d(2)
self.flatten1 = Flatten() # 将上一步输出的64*4*4展平
self.linear1 = Linear(64 * 4 * 4, 64)
self.linear2 = Linear(64, 10)
def forward(self, input):
input = self.conv1(input)
input = self.maxpool1(input)
input = self.conv2(input)
input = self.maxpool2(input)
input = self.conv3(input)
input = self.maxpool3(input)
input = self.flatten1(input)
input = self.linear1(input)
output = self.linear2(input)
return output
lizi = Lizi()
print(lizi)
效果如下:
如何检查网络是否正确,关注于输入输出是否为想要的,接着上面:
# 如何检查搭建的网络是否正确,输入的数据是否能得到想要的输出。
input = torch.ones((64, 3, 32, 32))
output = lizi(input)
print(output.shape)
Sequential的用法:
与以上的网络效果一样。
# Sequential的用法:
import torch
from torch import nn
from torch.nn import Conv2d, MaxPool2d, Flatten, Linear, Sequential
class Lizi(nn.Module):
def __init__(self):
super(Lizi, self).__init__()
self.model1 = Sequential(
Conv2d(3, 32, 5, 1, 2),
MaxPool2d(2),
Conv2d(32, 32, 5, 1, 2),
MaxPool2d(2),
Conv2d(32, 64, 5, 1, 2),
MaxPool2d(2),
Flatten(),
Linear(64 * 4 * 4, 64),
Linear(64, 10)
)
def forward(self, input):
output = self.model1(input)
return output
# 将网络用tensorboard可视化
from torch.utils.tensorboard import SummaryWriter
writer = SummaryWriter("logs")
writer.add_graph(lizi, input)