网站建设项目目标描述,信阳做网站的公司,河间建设网站,自问自答网站怎么做目录 一、导入包
二、数据预处理
三、定义神经网络
四、训练模型和测试模型
五、程序入口 一、导入包
import torch
import torch.nn as nn
import torch.optim as optim # 导入优化器
from torchvision import datasets, transforms # 导入数据集和数据预处理库
from tor…目录 一、导入包
二、数据预处理
三、定义神经网络
四、训练模型和测试模型
五、程序入口 一、导入包
import torch
import torch.nn as nn
import torch.optim as optim # 导入优化器
from torchvision import datasets, transforms # 导入数据集和数据预处理库
from torch.utils.data import DataLoader # 数据加载库
二、数据预处理
def data_loader():数据的预处理# 定义数据预处理transform transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.5), (0.5))])# 加载FashionMNIST数据集train_dataset datasets.FashionMNIST(root./data, trainTrue, downloadTrue, transformtransform)test_dataset datasets.FashionMNIST(root.data, trainFalse, downloadTrue, transformtransform)# 数据集加载器train_loader DataLoader( train_dataset,batch_size64, shuffleTrue)test_loader DataLoader(test_dataset,batch_size64, shuffleFalse)return train_loader, test_loader 这是一个常用于机器学习和深度学习研究中的数据集包含了10类不同时尚商品的图像每类有6000张训练图像和1000张测试图像。使用了PyTorch框架中的torchvision库来下载和加载Fashion-MNIST数据集。代码中定义了一个transform它会将图像转换为张量并对其进行归一化处理。然后分别创建训练集和测试集的数据加载器train_loader和test_loader这些加载器会在训练过程中以批量的形式提供数据。
三、定义神经网络
# 定义神经网络
class QYNN(nn.Module):def __init__(self):super().__init__()self.fc1 nn.Linear(28 * 28,128)self.fc2 nn.Linear(128,10)def forward(self, x):# 将数据展平x torch.flatten(x,start_dim1)# 激活x方便数据全联接x torch.relu(self.fc1(x))# 输出10分类x self.fc2(x)return x
代码定义了一个简单的全连接神经网络适用于Fashion-MNIST这样的图像分类任务。这个网络包含两个全连接层fc1和fc2分别用于特征提取和分类。
这里是您定义的QYNN类的一些解释 __init__方法定义了网络的结构。网络接受28x28像素的灰度图像作为输入首先通过一个线性层fc1将784个像素值映射到128个特征然后通过第二个线性层fc2将128个特征映射到10个输出对应于10个类别。 forward方法定义了数据通过网络的前向传播过程。输入数据首先被展平成一个一维向量然后通过fc1层接着是ReLU激活函数最后通过fc2层输出每个类别的得分。
四、训练模型和测试模型
训练模型
def train(model, train_loader):训练模型# 训练轮数epochs 10for epoch in range(epochs):running_loss 0.0for inputs, labels in train_loader:# 梯度清零optimizer.zero_grad()# 将图片塞进去outputs model(inputs)# 计算损失loss criterion(outputs, labels)# 反向传播loss.backward()# 更新参数optimizer.step()# 损失值的累加running_loss loss.item()print(fEpoch:{epoch1}/{epochs} | Loss: {running_loss/len(train_loader)})测试模型
test函数使用了torch.no_grad()来禁用梯度计算因为在测试阶段我们不需要计算梯度。函数遍历测试数据加载器中的每个批次将输入数据传递给模型以获取输出然后使用torch.max函数来获取每个样本的最高得分类别作为预测结果。最后函数计算预测正确的样本数量与总样本数量从而得到准确率。
def test(model, test_loader):测试模型correct 0 # 正确的数量total 0 # 样本的总量with torch.no_grad():for inputs, labels in test_loader:outputs model(inputs)_, predicted torch.max(outputs, 1)# 获取本次样本的数量total labels.size(0)# 预测值 和 标签 相同则正确 对预测值进行累加correct (predicted labels).sum().item()print(fTest Accuracy: {correct / total:.2%})
五、程序入口 if __name__ __main__:# 设置随机种子torch.manual_seed(21)# 实例化神经网络model QYNN()# 交叉商criterion nn.CrossEntropyLoss()# 优化器optimizer optim.SGD(model.parameters(),lr 0.01)# 数据集train_loader, test_loader data_loader()# 训练样本train(model, train_loader)# 测设样本test(model, test_loader)