pytorch构建网络
(1)导入必要的库
import torch
import torch.nn as nn
(2)定义神经网络类
class SimpkeNN(nn.Module):
#定义SimpleNN类,继承自nn.Module,所有的神经网络模型都应该继承自nn.Module,这样可以利用到该基类中很多功能,例如参数管理和模块化
(3)初始化方法
def __init__(self):
super(SimpleNN,self).__init__()
(4)定义神经网络层
self.fc1=nn.Linear( 784,128)
self.fc2=nn.Linear(128,128)
self.output=nn.Linear(128,10)
#定义了三个全连接层(也称为线性层):
self.fc1是第一个全连接层,输入特征为784(通常是处理过的28*28像素的MNIST图像),输出特征为128
self.fc2是第二个全连接层,它接收前一层128个特征的输出,并输出128个特征
self.output是输出层,接收来自上一层的128个特征的输出,并将其映射到10个输出,通常表示分类任务中的类别数量
(5)定义前向传播方法:
def forward(self,x):
x=torch.relu(self.fc1(x))
x=torch.relu(self.fc2(x))
x=self.output(x)
return x
#forward方法定义了数据通过网络的方式,即神经网络的前向传播
首先,数据x被传入第一个全连接层fc1,然后通过ReLU激活函数进行非线性变换,处理后的输出再次通过第二个全连接层fc2和另一个ReLU激活函数
最后通过输出层output得到最终的输出
数据加载与处理
(1)导入必要的库
from torchvision import transforms,datasets
from torch.utils.data import DataLoader
#torchvision是处理图像数据的库,它提供了常用的数据集和图像变换功能
#transforms用于数据预处理和增强
#datasets用于加载数据集
#DataLoader是PYTORCH中一个非常重要的类,它将一个可迭代的数据集封装成一个迭代器,方便批处理和数据洗牌等操作
(2)定义数据预处理操作
transform=transdorms.Compose([
transforms.ToTensor(),
transforms.Normalize((0.5,),(0.5,))
])
#Compose创建了一个变换序列
#ToTense()将PIL图像或NumPy ndarray转换为FloatTensor,并在[0.,1.]范围内缩放图像的像素强度值
#Normalize((0.5,),(0.5,))对张量图像进行标准化,给出的均值和标准差应用于所有三个通道
(3)加载训练集
train_set=dataseta.MINST(root='./data',train=True,download=True,transform=transform)
#使用datasets.MNIST加载MNIST训练数据集。root参数指定数据存储的路径,train=True表明是加载训练集(train=False加载测试集),download=True指不在指定路径时自动下载,transform=transform应用之前定义的预处理操作
(4)创建训练数据加载器
train_loader=DataLoader(train_set,batch_size=64,shuffle=True)
DataLoader封装了train_set,batch_size=64制定了每个批次的大小,shuffle=True表示在每个epoch开始时,数据将被打乱,这有助于模型泛化
(5)加载测试集
test_set=datasets.MINST(root='./data',train=False,transform=transform)
#train=False表明此处加载的是测试集
(6)创建测试数据加载器
test_loader=DataLoader(test_set,batch_size=64,shuffle=False)
#为测试数据集创建一个DataLoader,shuffle=False通常用于测试数据,因为在测试阶段不需要打乱数据