复制
收藏
提问
研究

import torch import torch.nn as nn from torchvision import datasets from torchvision import transforms import torchvision.utils import torch.utils.data as data # 对数据进行batch的划分,在训练模型时用到此函数,用来把训练数据分成多个小组,此函数每次抛出一组数据,直至把所有数据都抛出 from matplotlib import pyplot as plt import numpy as np import torch.nn.functional as F class Reshape(torch.nn.Module): def forward(self, x): # 将图像转为(X,1,28,28)的形式,其中X为图像的数量,1*28*28为图像格式,1为通道数 return x.view(-1, 1, 28, 28) net = nn.Sequential( # 定义LeNet-5网络结构 Reshape(), nn.Conv2d(1, 6, kernel_size=5, padding=2), nn.Sigmoid(), nn.AvgPool2d(kernel_size=2, stride=2), nn.Conv2d(6, 16, kernel_size=5), nn.Sigmoid(), nn.AvgPool2d(kernel_size=2, stride=2), nn.Flatten(), nn.Linear(16 * 5 * 5, 120), nn.Sigmoid(), nn.Linear(120, 84), nn.Sigmoid(), nn.Linear(84, 10) ) """ x = torch.rand(size=(1, 1, 28, 28), dtype=torch.float32) #初始化一个1*1*28*28的torch张量对模型进行检查,查看其相应层的输出 for layer in net: x=layer(x) print(layer.__class__.__name__,'output shape:\t',x.shape) """ def load_data_fashion_mnist(batch_seze): # 下载MNIST数据集然后加载到内存中 train_dataset = datasets.MNIST(root='../data', train=True, transform=transforms.ToTensor(), download=True) test_dataset = datasets.MNIST(root='../data', train=False, transform=transforms.ToTensor(), download=True) return (data.DataLoader(train_dataset, batch_size, shuffle=True), data.DataLoader(test_dataset, batch_size, shuffle=False)) batch_size = 64 train_iter, test_iter = load_data_fashion_mnist(batch_size) def imshow(img): img = img / 2 + 0.5 npimg = img.numpy() plt.imshow(np.transpose(npimg, (1, 2, 0))) plt.show() # print(iter(train_iter).next()[0].size()) # imshow(torchvision.utils.make_grid(iter(train_iter).next()[0])) #利用torchvision.utils.make_grid输出图像,再进行可视化展示 # 损失函数 loss_function = nn.CrossEntropyLoss() # 优化器 optimizer = torch.optim.Adam(net.parameters()) # 开始训练 num_epochs = 10 train_loss = [] for epoch in range(num_epochs): for batch_idx, (x, y) in enumerate(train_iter): out = net(x) y_onehot = F.one_hot(y, num_classes=10).float() # 转为one-hot编码 loss = loss_function(out, y_onehot) # 均方差 # 清零梯度 optimizer.zero_grad() loss.backward() optimizer.step() train_loss.append(loss.item()) if batch_idx % 10 == 0: print(epoch, batch_idx, loss.item()) # 绘制损失曲线 plt.figure(figsize=(16, 8)) plt.grid(True, linestyle='--', alpha=0.5) plt.plot(train_loss, label='loss') plt.legend(loc="best") plt.show() # 测试准确率 total_correct = 0 for batch_idx, (x, y) in enumerate(test_iter): out = net(x) pred = out.argmax(dim=1) correct = pred.eq(y).sum().float().item() total_correct += correct total_num = len(test_iter.dataset) test_acc = total_correct / total_num print(total_correct, total_num) print("test acc:", test_acc)帮我加图片

3月前
全网
文档
学术
百科
知识库
时间不限
自动
参考了16个来源并总结
查看步骤
全网检索信息
PyTorch
训练
可视化
找到“blog.csdn”、“cloud.tencent”、“github”16网站资料
回答完成
回答研究模式
更简洁一些

在您提供的代码中,您已经定义了一个用于手写数字识别的LeNet-5网络结构,并实现了数据加载、训练和测试的流程。然而,代码中并没有包含图片的加载和展示功能。为了在训练过程中可视化图片,您可以使用imshow函数来展示图片。以下是如何修改您的代码以添加图片加载和展示功能的步骤:

  1. 加载图片:首先,您需要从train_itertest_iter中获取图片数据。这可以通过迭代数据加载器来实现。

  2. 展示图片:使用imshow函数来展示获取的图片。

以下是修改后的代码示例,展示了如何在训练过程中展示一张图片:

# ...(省略了之前的代码)

# 展示一张图片的函数
def show_image(image):
    image = image / 2 + 0.5  # 对图片进行归一化处理
    np_image = image.numpy()  # 转换为numpy数组
    plt.imshow(np.transpose(np_image, (1, 2, 0)))  # 展示图片
    plt.show()

# 在训练循环中展示图片
for epoch in range(num_epochs):
    for batch_idx, (x, y) in enumerate(train_iter):
        # ...(省略了训练过程的代码)

        # 展示当前批次的第一张图片
        if batch_idx == 0:
            show_image(x[0])

# ...(省略了之后的代码)

请注意,这段代码假设x是一个包含多个图像的批次,其中x[0]是批次中的第一张图片。show_image函数会对图片进行归一化处理,并使用plt.imshow来展示图片。您可以在训练循环中的适当位置调用这个函数来展示图片。

此外,如果您想要在训练过程中动态展示损失曲线,您可以在绘制损失曲线的代码中添加动态更新的逻辑。但是,这通常涉及到更复杂的图形用户界面(GUI)编程,可能需要使用额外的库,如matplotlib.animation

希望这些修改能帮助您在训练过程中可视化图片和损失曲线。如果您有任何其他问题或需要进一步的帮助,请随时提问。

你觉得结果怎么样?
相关内容8

LeNet-5网络结构创建MNIST手写数字识别分类器1

LeNet-5网络构建 使用Pytorch实现MNIST数据集的手写数字识别。

LeNet-5神经网络结构的搭建与前向传播定义2

神经网络构建 定义LeNet-5网络结构及前向传播过程,优化器搭载GPU/CPU。

基于Pytorch复现LeNet-5在MNIST数据集的实现3

LeNet-5复现 Yann LeCun于1998年提出的LeNet-5网络在MNIST数据集的实现。

LeNet5网络结构代码与训练测试流程4

LeNet5训练测试 包含LeNet5网络结构代码,训练及测试集上测试网络学习效果。

使用LeNet-5网络训练本地LED数字数据集5

本地数据集训练 使用LeNet-5网络训练本地LED数字数据集,类似MNIST数据集。

PyTorch实现LeNet-5模型在MNIST数据集上的训练测试6

PyTorch模型实现 介绍使用PyTorch实现LeNet-5模型,并在MNIST数据集上进行训练和测试。

LeNet-5网络结构1

手写数字识别 使用LeNet-5创建MNIST分类器。

MNIST数据集6

手写数字数据集 包含60000个训练样本和10000个测试样本。

以上内容由AI搜集生成,仅供参考

在线客服