神经网络入门实战:(十四)pytorch 官网内置的 CIFAR10 数据集,及其网络模型

发布于:2024-12-05 ⋅ 阅读:(50) ⋅ 点赞:(0)

(一) pytorch 官网内置的网络模型

图像处理:

Models and pre-trained weights — Torchvision 0.20 documentation

(二) CIFAR10数据集的分类网络模型(仅前向传播):

下方的网络模型图片有误,已做修改,具体情参考代码。

在这里插入图片描述

1)代码如下:

Sequential() 函数的 demo
Sequential() 函数可以快速定义一个前馈神经网路,按顺序堆叠不同的层,但是要保证层之间的输入和输出尺寸要匹配。

import torch
from torch import nn
import torchvision
from torchvision import transforms
from torch.utils.data import DataLoader

class CIFAR10_NET(nn.Module):
	def __init__(self):
		super(CIFAR10_NET, self).__init__()
		self.conv1 = nn.Conv2d(3, 32, 5,padding=2) # 输入输出尺寸相同,故根据公式计算出padding的值
		self.pool1 = nn.MaxPool2d(2, 2)
		self.conv2 = nn.Conv2d(32, 32, 5,padding=2)
		self.pool2 = nn.MaxPool2d(2, 2)
		self.conv3 = nn.Conv2d(32, 64, 5,padding=2)
		self.pool3 = nn.MaxPool2d(2, 2)
		self.flatten = nn.Flatten()
		self.linear1 = nn.Linear(1024, 64)
		self.linear2 = nn.Linear(64, 10)

	def forward(self, x):
		x = self.conv1(x)
		x = self.pool1(x)
		x = self.conv2(x)
		x = self.pool2(x)
		x = self.conv3(x)
		x = self.pool3(x)
		x = self.flatten(x)
		x = self.linear1(x)
		x = self.linear2(x)
		return x

CIFAR10_NET_Instance = CIFAR10_NET()
print(CIFAR10_NET_Instance)

Sequential() 函数的 demo

import torch
from torch import nn
from torch.utils.tensorboard import SummaryWriter


class CIFAR10_NET(nn.Module):
	def __init__(self):
		super(CIFAR10_NET, self).__init__()
		self.model = nn.Sequential(
			nn.Conv2d(3, 32, 5, padding=2),  # 输入输出尺寸相同,故根据卷积层的公式计算出padding的值,此时默认stride=1
			nn.MaxPool2d(2, 2),
			nn.Conv2d(32, 32, 5, padding=2),
			nn.MaxPool2d(2, 2),
			nn.Conv2d(32, 64, 5, padding=2),
			nn.MaxPool2d(2, 2),
			nn.Flatten(),
			nn.Linear(1024, 64),
			nn.Linear(64, 10)
		)

	def forward(self, x):
		x = self.model(x)
		return x

CIFAR10_NET_Instance = CIFAR10_NET()
print(CIFAR10_NET_Instance)

writer = SummaryWriter('logs')
writer.add_graph(CIFAR10_NET_Instance, (torch.rand(1, 3, 32, 32), )) # 在tensorboard中将计算图可视化
writer.close()

在命令行使用 tensorboard 的效果图:

在这里插入图片描述

双击网络模型名:

在这里插入图片描述

继续双击会出现更多的细节内容!!

2)注意点:

  • 如果想要输入和输出的尺寸相同的话,需要按照卷积层中的公式来计算 paddingstride 的值,具体情参考笔记(十)。

  • 一般先搭建网络,在导入数据集之前,往往先用以下代码进行测试:

    # 先创建网络模型实例,假设为 test_net
    input = torch.ones((64,in_channels,H_in,W_in)) # in_channels、H_in、W_in根据数据集的输入设置
    output = test_net(input)
    print(output.shape)
    

    如果网络模型有错误,就会报错。


上一篇 下一篇
神经网络入门实战(十三) 待发布

网站公告

今日签到

点亮在社区的每一天
去签到