wdc 发表于 2025-2-7 01:35:56

零基础学习人工智能—Python—Pytorch学习(十一)

前言

本文主要介绍tensorboard的使用。
tensorboard是一个可视化的,支持人工智能学习的一个工具。
tensorboard的官方地址:https://www.tensorflow.org/tensorboard
本文内容来自视频教程16课,个人感觉对于tensorboard讲的非常好。
Tensorboard的使用

使用代码如下:
import torchimport torch.nn as nnimport torchvisionimport torchvision.transforms as transformsimport matplotlib.pyplot as plt import sysimport torch.nn.functional as Ffrom torch.utils.tensorboard import SummaryWriter# pip install tensorboard 安装 tensorboard# 启动 tensorboard 启动成功的话,地址是http://localhost:6006/# logdir要等于 SummaryWriter('runs/mnist1')的入参地址# tensorboard --logdir=C:\Project\python_test\github\PythonTest\PythonTest\PythonTest\pytorchTutorial\runs# tensorboard的官方地址:https://www.tensorflow.org/tensorboard############## TENSORBOARD ########################writer = SummaryWriter('runs/mnist1')#################################################### Device configurationdevice = torch.device('cuda' if torch.cuda.is_available() else 'cpu')# Hyper-parameters input_size = 784 # 28x28hidden_size = 500 num_classes = 10num_epochs = 1batch_size = 64learning_rate = 0.001# MNIST dataset train_dataset = torchvision.datasets.MNIST(root='./data',                                          train=True,                                          transform=transforms.ToTensor(),                                             download=True)test_dataset = torchvision.datasets.MNIST(root='./data',                                           train=False,                                           transform=transforms.ToTensor())# Data loadertrain_loader = torch.utils.data.DataLoader(dataset=train_dataset,                                          batch_size=batch_size,                                          shuffle=True)test_loader = torch.utils.data.DataLoader(dataset=test_dataset,                                           batch_size=batch_size,                                           shuffle=False)examples = iter(test_loader)example_data, example_targets = next(examples)for i in range(6):    plt.subplot(2,3,i+1)    plt.imshow(example_data, cmap='gray')#plt.show()############## TENSORBOARD ########################img_grid = torchvision.utils.make_grid(example_data)writer.add_image('mnist_images', img_grid)#writer.close()#sys.exit()#################################################### Fully connected neural network with one hidden layerclass NeuralNet(nn.Module):    def __init__(self, input_size, hidden_size, num_classes):      super(NeuralNet, self).__init__()      self.input_size = input_size      self.l1 = nn.Linear(input_size, hidden_size)         self.relu = nn.ReLU()      self.l2 = nn.Linear(hidden_size, num_classes)          def forward(self, x):      out = self.l1(x)      out = self.relu(out)      out = self.l2(out)      # no activation and no softmax at the end      return outmodel = NeuralNet(input_size, hidden_size, num_classes).to(device)# Loss and optimizercriterion = nn.CrossEntropyLoss()optimizer = torch.optim.Adam(model.parameters(), lr=learning_rate)############## TENSORBOARD ########################writer.add_graph(model, example_data.reshape(-1, 28*28).to(device))#writer.close()#sys.exit()#################################################### Train the modelrunning_loss = 0.0running_correct = 0n_total_steps = len(train_loader)for epoch in range(num_epochs):    for i, (images, labels) in enumerate(train_loader):          # origin shape:       # resized:       images = images.reshape(-1, 28*28).to(device)      labels = labels.to(device)                # Forward pass      outputs = model(images)      loss = criterion(outputs, labels)                # Backward and optimize      optimizer.zero_grad()      loss.backward()      optimizer.step()                running_loss += loss.item()      _, predicted = torch.max(outputs.data, 1)      running_correct += (predicted == labels).sum().item()      if (i+1) % 100 == 0:            print (f'Epoch [{epoch+1}/{num_epochs}], Step [{i+1}/{n_total_steps}], Loss: {loss.item():.4f}')            ############## TENSORBOARD ########################            writer.add_scalar('training loss', running_loss / 100, epoch * n_total_steps + i)            running_accuracy = running_correct / 100 / predicted.size(0)            writer.add_scalar('accuracy', running_accuracy, epoch * n_total_steps + i)            running_correct = 0            running_loss = 0.0            #################################################### Test the model# In test phase, we don't need to compute gradients (for memory efficiency)class_labels = []class_preds = []with torch.no_grad():    n_correct = 0    n_samples = 0    for images, labels in test_loader:      images = images.reshape(-1, 28*28).to(device)      labels = labels.to(device)      outputs = model(images)      # max returns (value ,index)      values, predicted = torch.max(outputs.data, 1)      n_samples += labels.size(0)      n_correct += (predicted == labels).sum().item()      class_probs_batch =       class_preds.append(class_probs_batch)      class_labels.append(labels)    # 10000, 10, and 10000, 1    # stack concatenates tensors along a new dimension    # cat concatenates tensors in the given dimension    class_preds = torch.cat()    class_labels = torch.cat(class_labels)    acc = 100.0 * n_correct / n_samples    print(f'Accuracy of the network on the 10000 test images: {acc} %')    ############## TENSORBOARD ########################    classes = range(10)    for i in classes:      labels_i = class_labels == i      preds_i = class_preds[:, i]      writer.add_pr_curve(str(i), labels_i, preds_i, global_step=0)      writer.close()    ###################################################运行 http://localhost:6006 ,可以得到下图,可以根据图中的曲线等信息进行分析学习结果。


<hr>传送门:
零基础学习人工智能—Python—Pytorch学习—全集
<hr>注:此文章为原创,任何形式的转载都请联系作者获得授权并注明出处!
<hr>
<hr>若您觉得这篇文章还不错,请点击下方的【推荐】,非常感谢!
https://www.cnblogs.com/kiba/p/18601612
页: [1]
查看完整版本: 零基础学习人工智能—Python—Pytorch学习(十一)