单页面 网站怎么做,网站 团队,海口专业网站搭建厂,网络营销渠道类型有哪些一、Sequential介绍
torch.nn.Sequential(*args) 由官网给的Example可以大概了解到Sequential是将多层网络进行便捷整合#xff0c;方便可视化以及简化网络复杂性
二、复现网络模型训练CIFAR-10数据集 这里面有个Hidden units隐藏单元其实就是连个线性层 把隐藏层全部展开整…一、Sequential介绍
torch.nn.Sequential(*args) 由官网给的Example可以大概了解到Sequential是将多层网络进行便捷整合方便可视化以及简化网络复杂性
二、复现网络模型训练CIFAR-10数据集 这里面有个Hidden units隐藏单元其实就是连个线性层 把隐藏层全部展开整个神经网络架构如下
①输入图像为3通道的(32,32)图像(C,H,W)(3,32,32) ②通过一层(5,5)的卷积Convolution输出特征图为(32,32,32)特征图的(H,W)通过(5,5)的卷积核大小没有发生变换这说明卷积层肯定对原始图像进行了加边 查看下官网给的卷积层padding的计算公式 分析一下 故padding 2加了两成外边之所以channel由3变成了32是因为卷积核有多个并非一个卷积核 最终输入3通道输出32通道stride 1padding 2dilation 1(默认值)kernel_size 5 torch.nn.Conv2d(in_channels3,out_channels32,kernel_size5,stride1,padding2)
③接着将(32,32,32)特征通过Max-Pooling池化核为(2,2)输出为(32,16,16)的特征图 torch.nn.MaxPool2d(kernel_size2)
④接着将(32,16,16)特征图通过(5,5)大小的卷积核进行卷积输出特征图为(32,16,16)特征图的(H,W)通过(5,5)的卷积核大小没有发生变换这说明卷积层肯定对原始图像进行了加边 同理根据官网给的计算公式可以求出padding 2 通过上面两次的计算可以看出只要通过卷积核大小为(5,5)卷积之后的大小不变则padding肯定为2
故padding 2加了两成外边这里channel由32变成了32可以得知仅使用了一个卷积核 最终输入32通道输出32通道stride 1padding 2dilation 1(默认值)kernel_size 5 torch.nn.Conv2d(in_channels32,out_channels32,kernel_size5,stride1,padding2)
⑤接着将(32,16,16)的特征图通过Max-Pooling池化核为(2,2)输出为(32,8,8)的特征图 torch.nn.MaxPool2d(kernel_size2)
⑥再将(32,8,8)的特征图输入到卷积核为(5,5)的卷积层中得到(64,8,8)特征图特征图的(H,W)通过(5,5)的卷积核大小没有发生变换这说明卷积层肯定对原始图像进行了加边由前两次的计算得出的结果可以得知padding2这里channel由32变成了64是因为使用了多个卷积核分别进行卷积 torch.nn.Conv2d(in_channels32, out_channels64, kernel_size5, stride1, padding2)
⑦再将(64,8,8)的特征图通过Max-Pooling池化核为(2,2)输出为(64,4,4)的特征图 torch.nn.MaxPool2d(kernel_size2)
⑧再将(64,4,4)的特征图进行Flatten展平成(1024)特征
torch.nn.Flatten()
⑨再将(1024)特征传入第一个Linear层输出(64) torch.nn.Linear(1024,64)
⑩最后将(64)特征图经过第二个Linear层输出(10)从而达到CIFAR-10数据集的10分类任务 torch.nn.Linear(64,10)
三、传统神经网络实现
import torch
from torch import nn
from torch.nn import Conv2d
from torch.utils.tensorboard import SummaryWriterclass Beyond(nn.Module):def __init__(self):super(Beyond,self).__init__()self.conv_1 torch.nn.Conv2d(in_channels3,out_channels32,kernel_size5,stride1,padding2)self.maxpool_1 torch.nn.MaxPool2d(kernel_size2)self.conv_2 torch.nn.Conv2d(in_channels32,out_channels32,kernel_size5,stride1,padding2)self.maxpool_2 torch.nn.MaxPool2d(kernel_size2)self.conv_3 torch.nn.Conv2d(in_channels32, out_channels64, kernel_size5, stride1, padding2)self.maxpool_3 torch.nn.MaxPool2d(kernel_size2)self.flatten torch.nn.Flatten()self.linear_1 torch.nn.Linear(1024,64)self.linear_2 torch.nn.Linear(64,10)def forward(self,x):x self.conv_1(x)x self.maxpool_1(x)x self.conv_2(x)x self.maxpool_2(x)x self.conv_3(x)x self.maxpool_3(x)x self.flatten(x)x self.linear_1(x)x self.linear_2(x)return xbeyond Beyond()
print(beyond)Beyond((conv_1): Conv2d(3, 32, kernel_size(5, 5), stride(1, 1), padding(2, 2))(maxpool_1): MaxPool2d(kernel_size2, stride2, padding0, dilation1, ceil_modeFalse)(conv_2): Conv2d(32, 32, kernel_size(5, 5), stride(1, 1), padding(2, 2))(maxpool_2): MaxPool2d(kernel_size2, stride2, padding0, dilation1, ceil_modeFalse)(conv_3): Conv2d(32, 64, kernel_size(5, 5), stride(1, 1), padding(2, 2))(maxpool_3): MaxPool2d(kernel_size2, stride2, padding0, dilation1, ceil_modeFalse)(flatten): Flatten(start_dim1, end_dim-1)(linear_1): Linear(in_features1024, out_features64, biasTrue)(linear_2): Linear(in_features64, out_features10, biasTrue)
)
input torch.zeros((64,3,32,32))
print(input.shape)#torch.Size([64, 3, 32, 32])
output beyond(input)
print(output.shape)#torch.Size([64, 10])#将网络图上传值tensorboard中进行可视化展示
writer SummaryWriter(y_log)
writer.add_graph(beyond,input)
writer.close()在Terminal下运行tensorboard --logdiry_log --port7870logdir为打开事件文件的路径port为指定端口打开 通过指定端口2312进行打开tensorboard若不设置port参数默认通过6006端口进行打开。 四、使用Sequential实现神经网络
import torch
from torch import nn
from torch.nn import Conv2d
from torch.utils.tensorboard import SummaryWriterclass Beyond(nn.Module):def __init__(self):super(Beyond,self).__init__()self.model torch.nn.Sequential(torch.nn.Conv2d(3,32,5,padding2),torch.nn.MaxPool2d(2),torch.nn.Conv2d(32,32,5,padding2),torch.nn.MaxPool2d(2),torch.nn.Conv2d(32,64,5,padding2),torch.nn.MaxPool2d(2),torch.nn.Flatten(),torch.nn.Linear(1024,64),torch.nn.Linear(64,10))def forward(self,x):x self.model(x)return xbeyond Beyond()
print(beyond)Beyond((conv_1): Conv2d(3, 32, kernel_size(5, 5), stride(1, 1), padding(2, 2))(maxpool_1): MaxPool2d(kernel_size2, stride2, padding0, dilation1, ceil_modeFalse)(conv_2): Conv2d(32, 32, kernel_size(5, 5), stride(1, 1), padding(2, 2))(maxpool_2): MaxPool2d(kernel_size2, stride2, padding0, dilation1, ceil_modeFalse)(conv_3): Conv2d(32, 64, kernel_size(5, 5), stride(1, 1), padding(2, 2))(maxpool_3): MaxPool2d(kernel_size2, stride2, padding0, dilation1, ceil_modeFalse)(flatten): Flatten(start_dim1, end_dim-1)(linear_1): Linear(in_features1024, out_features64, biasTrue)(linear_2): Linear(in_features64, out_features10, biasTrue)
)
input torch.zeros((64,3,32,32))
print(input.shape)#torch.Size([64, 3, 32, 32])
output beyond(input)
print(output.shape)#torch.Size([64, 10])#将网络图上传值tensorboard中进行可视化展示
writer SummaryWriter(y_log)
writer.add_graph(beyond,input)
writer.close()在Terminal下运行tensorboard --logdiry_log --port7870logdir为打开事件文件的路径port为指定端口打开 通过指定端口2312进行打开tensorboard若不设置port参数默认通过6006端口进行打开。 实现效果是完全一样的使用Sequential看起来更加简介可视化效果更好些。