Ubuntu16.04安装cpu版本的pytorch和测试小demo

    技术2022-07-17  81

    前言:

    当你熟悉ubuntu16.04安装Anaconda和使用Anaconda创建对应python版本的虚拟环境,我们开始接下来的步骤。

    1.安装typroch

    去官网生成对应的typorch的pip或conda 命令行 打开终端input:

    source activate learn #切换到自己创建的learn环境,不会请看前言的两个博客 conda install pytorch torchvision cpuonly -c pytorch #安装pytorch(根据提示来即可),若因某种原因出现段错误(核心已转储)的情况,重启虚拟机,再来一次即可。

    完成后验证是否有错误

    python import torch import torchvision #若没有保存则安装成功

    2.测试小demo:

    # encoding: utf-8 import torch import torch.nn as nn import torch.nn.functional as F #加载nn中的功能函数 import torch.optim as optim #加载优化器有关包 import torch.utils.data as Data from torchvision import datasets,transforms #加载计算机视觉有关包 from torch.autograd import Variable BATCH_SIZE = 64 #加载torchvision包内内置的MNIST数据集 这里涉及到transform:将图片转化成torchtensor train_dataset = datasets.MNIST(root='~/data/',train=True,transform=transforms.ToTensor(),download=True) test_dataset = datasets.MNIST(root='~/data/',train=False,transform=transforms.ToTensor()) #加载小批次数据,即将MNIST数据集中的data分成每组batch_size的小块,shuffle指定是否随机读取 train_loader = Data.DataLoader(dataset=train_dataset,batch_size=BATCH_SIZE,shuffle=True) test_loader = Data.DataLoader(dataset=test_dataset,batch_size=BATCH_SIZE,shuffle=False) #定义网络模型亦即Net 这里定义一个简单的全连接层784->10 class Model(nn.Module): def __init__(self): super(Model,self).__init__() self.linear1 = nn.Linear(784,10) def forward(self,X): return F.relu(self.linear1(X)) model = Model() #实例化全连接层 loss = nn.CrossEntropyLoss() #损失函数选择,交叉熵函数 optimizer = optim.SGD(model.parameters(),lr = 0.1) num_epochs = 5 #以下四个列表是为了可视化(暂未实现) losses = [] acces = [] eval_losses = [] eval_acces = [] for echo in range(num_epochs): train_loss = 0 #定义训练损失 train_acc = 0 #定义训练准确度 model.train() #将网络转化为训练模式 for i,(X,label) in enumerate(train_loader): #使用枚举函数遍历train_loader X = X.view(-1,784) #X:[64,1,28,28] -> [64,784]将X向量展平 X = Variable(X) #包装tensor用于自动求梯度 label = Variable(label) out = model(X) #正向传播 lossvalue = loss(out,label) #求损失值 optimizer.zero_grad() #优化器梯度归零 lossvalue.backward() #反向转播,刷新梯度值 optimizer.step() #优化器运行一步,注意optimizer搜集的是model的参数 #计算损失 train_loss += float(lossvalue) #计算精确度 _,pred = out.max(1) num_correct = (pred == label).sum() acc = float(num_correct) / X.shape[0] train_acc += acc losses.append(train_loss / len(train_loader)) acces.append(train_acc / len(train_loader)) print("echo:"+' ' +str(echo)) print("lose:" + ' ' + str(train_loss / len(train_loader))) print("accuracy:" + ' '+str(train_acc / len(train_loader))) eval_loss = 0 eval_acc = 0 model.eval() #模型转化为评估模式 for X,label in test_loader: X = X.view(-1,784) X = Variable(X) label = Variable(label) testout = model(X) testloss = loss(testout,label) eval_loss += float(testloss) _,pred = testout.max(1) num_correct = (pred == label).sum() acc = float(num_correct) / X.shape[0] eval_acc += acc eval_losses.append(eval_loss / len(test_loader)) eval_acces.append(eval_acc / len(test_loader)) print("testlose: " + str(eval_loss/len(test_loader))) print("testaccuracy:" + str(eval_acc/len(test_loader)) + '\n')

    将test.py拉入自己所创建的learn环境中(放在哪都可以,我只是为了少写路径)在此处

    打开终端input:

    source activate learn #切换到自己创建的learn环境,不会请看前言的两个博客 python test.py

    output:

    Processed: 0.009, SQL: 9