网站搭建软件工具,福州高端网站定制,景区网站设计,北京市建设工程信息网站1、首先#xff0c;导入所需的库和模块#xff0c;包括NumPy、PyTorch、MNIST数据集、数据处理工具、模型层、优化器、损失函数、混淆矩阵、绘图工具以及数据处理工具。
import numpy as np
import torch
from torchvision.datasets import mnist
import torchvision.transf…1、首先导入所需的库和模块包括NumPy、PyTorch、MNIST数据集、数据处理工具、模型层、优化器、损失函数、混淆矩阵、绘图工具以及数据处理工具。
import numpy as np
import torch
from torchvision.datasets import mnist
import torchvision.transforms as transforms
from torch.utils.data import DataLoader
import torch.nn.functional as F
import torch.optim as optim
from torch import nn
from sklearn.metrics import confusion_matrix
import matplotlib.pyplot as plt
import seaborn as sns
import csv
import pandas as pd
2、设置超参数包括训练批次大小、测试批次大小、学习率和训练周期数。
# 设置超参数
train_batch_size 64
test_batch_size 64
learning_rate 0.001
num_epochs 10
3、创建数据转换管道将图像数据转换为张量并进行标准化。
transform transforms.Compose([transforms.ToTensor(),transforms.Normalize([0.5], [0.5])
])
4、下载和预处理MNIST数据集分为训练集和测试集。
# 下载和预处理数据集
train_dataset mnist.MNIST(data, trainTrue, transformtransform, downloadTrue)
test_dataset mnist.MNIST(data, trainFalse, transformtransform)
5、创建用于训练和测试的数据加载器以便有效地加载数据。
# 创建数据加载器
train_loader DataLoader(train_dataset, batch_sizetrain_batch_size, shuffleTrue)
test_loader DataLoader(test_dataset, batch_sizetest_batch_size, shuffleFalse) 6、定义了一个简单的CNN模型包括两个卷积层和两个全连接层。
# 定义CNN模型
class CNN(nn.Module):def __init__(self):super(CNN, self).__init__()self.conv1 nn.Conv2d(1, 32, kernel_size5)self.conv2 nn.Conv2d(32, 64, kernel_size5)self.fc1 nn.Linear(1024, 256)self.fc2 nn.Linear(256, 10)def forward(self, x):x F.relu(F.max_pool2d(self.conv1(x), 2))x F.relu(F.max_pool2d(self.conv2(x), 2))x x.view(x.size(0), -1)x F.relu(self.fc1(x))x self.fc2(x)return F.log_softmax(x, dim1)
7、初始化模型、优化器和损失函数。
# 初始化模型、优化器和损失函数
model CNN()
optimizer optim.Adam(model.parameters(), lrlearning_rate)
criterion nn.CrossEntropyLoss()
8、准备用于记录训练和测试过程中损失和准确率的列表。
# 记录训练和测试过程中的损失和准确率
train_losses []
test_losses []
train_accuracies []
test_accuracies []
9、进入训练循环遍历每个训练周期。在每个训练周期内进入训练模式遍历训练数据批次计算损失、反向传播并更新模型参数同时记录训练损失和准确率。
for epoch in range(num_epochs):model.train()train_loss 0.0correct 0total 0for batch_idx, (data, target) in enumerate(train_loader):optimizer.zero_grad()output model(data)loss criterion(output, target)loss.backward()optimizer.step()train_loss loss.item()# 计算训练准确率_, predicted output.max(1)total target.size(0)correct predicted.eq(target).sum().item()# 计算平均训练损失和训练准确率train_loss / len(train_loader)train_accuracy 100. * correct / totaltrain_losses.append(train_loss)train_accuracies.append(train_accuracy) # 记录训练准确率# 测试模型model.eval()test_loss 0.0correct 0all_labels []all_preds []with torch.no_grad():for data, target in test_loader:output model(data)test_loss criterion(output, target).item()pred output.argmax(dim1, keepdimTrue)correct pred.eq(target.view_as(pred)).sum().item()all_labels.extend(target.numpy())all_preds.extend(pred.numpy())10、在每个训练周期结束后进入测试模式遍历测试数据批次计算测试损失和准确率同时记录它们。打印每个周期的训练和测试损失以及准确率。
# 计算平均测试损失和测试准确率test_loss / len(test_loader)test_accuracy 100. * correct / len(test_loader.dataset)test_losses.append(test_loss)test_accuracies.append(test_accuracy)print(fEpoch [{epoch 1}/{num_epochs}] - Train Loss: {train_loss:.4f}, Train Accuracy: {train_accuracy:.2f}%, Test Loss: {test_loss:.4f}, Test Accuracy: {test_accuracy:.2f}%)
11、losses、acces、eval_losses、eval_acces保存到TXT文件 # 保存训练结果
data np.column_stack((train_losses,test_losses,train_accuracies, test_accuracies))
np.savetxt(results.txt, data)
12、绘制Loss、ACC图像
# 绘制Loss曲线图
plt.figure(figsize(10, 2))
plt.plot(train_losses, labelTrain Loss, colorblue)
plt.plot(test_losses, labelTest Loss, colorred)
plt.xlabel(Epoch)
plt.ylabel(Loss)
plt.legend()
plt.title(Loss Curve)
plt.grid(True)
plt.savefig(loss_curve.png)
plt.show()# 绘制Accuracy曲线图
plt.figure(figsize(10, 2))
plt.plot(train_accuracies, labelTrain Accuracy, colorred) # 绘制训练准确率曲线
plt.plot(test_accuracies, labelTest Accuracy, colorgreen)
plt.xlabel(Epoch)
plt.ylabel(Accuracy)
plt.legend()
plt.title(Accuracy Curve)
plt.grid(True)
plt.savefig(accuracy_curve.png)
plt.show() 13、绘制混淆矩阵图像
# 计算混淆矩阵
confusion_mat confusion_matrix(all_labels, all_preds)
plt.figure(figsize(10, 8))
sns.heatmap(confusion_mat, annotTrue, fmtd, cmapBlues, cbarFalse)
plt.xlabel(Predicted Labels)
plt.ylabel(True Labels)
plt.title(Confusion Matrix)
plt.savefig(confusion_matrix.png)
plt.show()