零基础学习人工智能—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]