栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

PyTorch学习笔记(二)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

PyTorch学习笔记(二)

import torch
import torchvision
import torchvision.transforms as transforms

import matplotlib.pyplot as plt
import numpy as np

import torch.nn as nn
import torch.nn.functional as F

import torch.optim as optim

transform = transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))])
# 定义 下载数据集
trainset    = torchvision.datasets.CIFAR10(root='./data', train=True,download=True, transform=transform)
# 加载训练数据
trainloader = torch.utils.data.DataLoader(trainset, batch_size=4,shuffle=True, num_workers=2)

# 定义
testset     = torchvision.datasets.CIFAR10(root='./data', train=False,download=True, transform=transform)
#加载测试数据
testloader  = torch.utils.data.DataLoader(testset, batch_size=4,shuffle=False, num_workers=2)
classes = ('plane', 'car', 'bird', 'cat','deer', 'dog', 'frog', 'horse', 'ship', 'truck')
# PyTorch 神经网络
# 神经网络可以通过 torch.nn 包来构建
# 一个典型的神经网络训练过程包括以下几点:
#   1.定义一个包含可训练参数的神经网络
#   2.迭代整个输入
#   3.通过神经网络处理输入
#   4.计算损失(loss)
#   5.反向传播梯度到神经网络的参数
#   6.更新网络的参数,典型的用一个简单的更新方法:weight = weight - learning_rate *gradien
class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        # 卷积
        self.conv1 = nn.Conv2d(3, 6, 5)
        # 池化
        self.pool = nn.MaxPool2d(2, 2)
        # 卷积
        self.conv2 = nn.Conv2d(6, 16, 5)
        # 全连接
        self.fc1 = nn.Linear(16 * 5 * 5, 120)
        # 全连接
        self.fc2 = nn.Linear(120, 84)
        # 全连接
        self.fc3 = nn.Linear(84, 10)
    def forward(self, x):
        # 向前传播

        # 卷积->激活函数->池化
        x = self.pool(F.relu(self.conv1(x)))
        # 卷积->激活函数->池化
        x = self.pool(F.relu(self.conv2(x)))
        # 改变维度
        x = x.view(-1, 16 * 5 * 5)
        # 全连接->激活函数
        x = F.relu(self.fc1(x))
        # 全连接->激活函数
        x = F.relu(self.fc2(x))
        # 全连接
        x = self.fc3(x)
        return x
if __name__ == "__main__":
    device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
    print(device)
    # 网络
    net = Net()
    # 分类交叉熵Cross-Entropy 作损失函数
    # 动量SGD做优化器 ???
    criterion = nn.CrossEntropyLoss()
    # lr 学习率 
    # momentum 我理解等价于衰减率
    optimizer = optim.SGD(net.parameters(), lr=0.001, momentum=0.9)

    for epoch in range(3):
        running_loss = 0.0
        for index,data in enumerate(trainloader,0):
            inputs , labels = data
            optimizer.zero_grad()
            outputs =net(inputs)
            loss = criterion(outputs,labels)
            loss.backward()
            optimizer.step()
            running_loss += loss.item()
            if index % 2000 == 1999:
                # print every 2000 mini-batches
                print('[%d, %5d] loss: %.3f' %
                (epoch + 1, index + 1, running_loss / 2000))
                running_loss = 0.0
    correct = 0
    total = 0
    with torch.no_grad():
        for data in testloader:
            images, labels = data
            outputs = net(images)
            _, predicted = torch.max(outputs.data, 1)
            total += labels.size(0)
            correct += (predicted == labels).sum().item()
    print('Accuracy of the network on the 10000 test images: %d %%' % (100 * correct / total))

    class_correct = list(0. for i in range(10))
    class_total = list(0. for i in range(10))
    with torch.no_grad():
        for data in testloader:
            images, labels = data
            outputs = net(images)
            _, predicted = torch.max(outputs, 1)
            c = (predicted == labels).squeeze()
            for i in range(4):
                label = labels[i]
                class_correct[label] += c[i].item()
                class_total[label] += 1
    for i in range(10):
        print('Accuracy of %5s : %2d %%' % (classes[i], 100 * class_correct[i] / class_total[i]))
    print('Finished Training')

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1001334.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号