Step1 实验室的服务器配置
参考: 1.服务器环境配置(Anaconda+pytorch)_是皮卡丘奥-CSDN博客_服务器配置anaconda
2.【Pytorch】在实验室linux系统服务器上搭建自己的pytorch-gpu环境过程详解!
一:下载软件:ZeroTier One 和MobaXterm
ZeroTier One会有一个node id(自动生成的)
node id记得给服务器管理员,然后他会给你账号和密码(默认:账号是名字,密码是123456)
然后加入上图中第四行的 3efa5巴拉巴拉.....
二:打开 MobaXterm
点击左上角的Session,选择SSH,输入服务器(192.168巴拉巴拉.....)还有自己的账号(可以先点击那个小正方框),点击ok就可以重新设定密码(第一次使用时会有)并使用服务器了
(在这步可能会出现许多问题,可以尝试1关闭电脑的防火墙 2 ZeroTier One中加入网络Join Network把所有的权限都打开,我当时遇到的问题是3实验室服务器崩溃了,过了一天就好了)
三.安装pytorch
首先,先在服务器上安装anaconda(linux)版本,这个可以去官网 找一下
一般来讲下载64-Bit(x86)那个就行,具体还是看服务器的要求(还有另一种直接在MobaXterm直接下载,亲测网速太慢),下载好的文件拖动到MobaXterm中(见下图,我直接放在目录里了,也建议放在目录里)
继续:
bash Anaconda3-2021.05-Linux-x86_64.sh
然后一路enter,然后输入yes
会提示你安装在哪个文件夹,可以自由发挥(最好新建一个文件夹,文件实在太多了,显得美观)例如:/home/ff/anaconda_anzhuang(看一下自己的文件路径,名字和我的是不一样的)
接着输入
vim ~/.bashrc
然后在文件中按 i 进入编辑
在最后一行添加
export PATH="/home/ff/anaconda_anzhuang/bin:$PATH"
然后按Esc退出
然后输入:w保存文件
然后输入 :q!退出文件(注意此处的路径,一定要和你自己一样)
依次输入以下:
source ~/.bashrc
然后输入以下,进入base
source activate
然后输入进行安装pytorch
conda create -n pytorch python=3.7
然后:
conda activate pytorch
就进入了pytorch环境
接下来可以安装一些包,自由发挥吧
刚运行了一个程序说没有torch 就去下了一个
先来个清华源
pip3 install torch torchvision -i https://pypi.tuna.tsinghua.edu.cn/simple/
然后又用到了matplotlib,所以
apt install python3-pip pip3 install numpy pip3 install scipy pip3 install matplotlib
结束!下次再重新打开的时候运行 补充 中的3和4就可以正常使用pytorch了!
补充:
1. nvidia-smi 查看所有服务器
2.CUDA_VISIBLE_DEVICES=(此处是服务器代号) python (此处是程序名).py
例:CUDA_VISIBLE_DEVICES=0 python Shixun_week6.py
3.source activate进入base
4.conda activate pytorch 进入pytorch
注:进入pytorch才可以运行pytorch程序
5.cd (目录名):进入目录
例:
Step2 图像分类——cifar-10数据集
是一个很经典的案例,10个类6万张图片,5万张训练集和1万张测试集。代码是彩色的32*32大小。设计的其中代码如下
import torch import torchvision #transforms 定义了一系列数据转化形式,并对数据进行处理 import torchvision.transforms as transforms import torch.nn as nn import torch.nn.functional as F import numpy as np import matplotlib.pyplot as plt 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=False,num_workers=0) #测试数据集: 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=0) classes = ('plane', 'car', 'bird', 'cat','deer', 'dog', 'frog', 'horse', 'ship', 'truck') # 二、定义神经网络Net类: class Net(nn.Module): # 定义神经网络结构 1x32x32 def __init__(self): # super()调用下一个父类,并返回父类实例的一个方法 super(Net, self).__init__() #两个卷积层,三个全连接层 # 第一层:卷积层 self.conv1 = nn.Conv2d(3, 6, 3) # 输入频道:1 输出频道:6 3x3卷积核 # 第二层:卷积层 #上一层的输出频道是下一层的输入频道 self.conv2 = nn.Conv2d(6, 16, 3) # 输入频道:6 输出频道:16 3x3卷积核 # 第三层:全连接层 28:32-2-2 self.fc1 = nn.Linear(16 * 28 * 28, 512) # 输入维度:16x28x28 输出维度:512 # 第四层:全连接层 self.fc2 = nn.Linear(512, 64) # 输入维度:512 输出维度:64 # 第五层:全连接层 self.fc3 = nn.Linear(64, 10) # 输入维度:64 输出维度:10 输出10代表着0~9的不同分值 # 定义神经网络数据流向: 池化的代码F.max_pool2d写在这里(这里不用) def forward(self, x): # 第一层卷积层: x = self.conv1(x) x = F.relu(x) # 激活 # 传递到第二层卷积层: x = self.conv2(x) x = F.relu(x) # 激活 # 传递到第三层全连接层: x = x.view(-1, 16 * 28 * 28) # 改变x的形状 用-1以动态调整 x = self.fc1(x) x = F.relu(x) # 传递到第四层全连接层: x = self.fc2(x) x = F.relu(x) # 传递到第五层全连接层: x = self.fc3(x) return x net = Net() #三、定义损失函数和优化器: criterion=nn.CrossEntropyLoss() optimizer=optim.SGD(net.parameters(),lr=0.001,momentum=0.9) #使用的是SGD #四、训练神经网络: for epoch in range(2): for i, data in enumerate(trainloader): images, labels = data # 数据包括图像与标签两部分 outputs = net(images) loss = criterion(outputs, labels) # 计算损失 # 更新神经网络权重: optimizer.zero_grad() # 梯度清零 loss.backward() # 本次学习的梯度反向传递 optimizer.step() # 利用本次的梯度更新权值 # 定期输出: if (i % 1000 == 0): print("Epoch:%d,Step:%d,Loss:%.3f" % (epoch, i, loss.item())) print("结束!") #五、测试模型 # 1.总体准确率: correct = 0.0 # 测试数据中正确个数 total = 0.0 # 总共测试数据数量 with torch.no_grad(): # 不需要梯度 for data in testloader: #测试集中有1w张图片 images, labels = data outputs = net(images) _, predicted = torch.max(outputs.data, 1) #这个 下划线_ 表示的就是具体的value,也就是输出的最大值。 由于后续用不到,所以写_ # 统计正确数量和总共数量 correct += (predicted == labels).sum() total += labels.size(0) print('准确率:',float(correct) / total) #2.每一类的准确率: 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('%5s的准确率 : %2d %%' % (classes[i], 100 * class_correct[i] / class_total[i]))
代码分为几个部分:
1.数据导入
包括:定义归一化方法,训练集,数据集
2.定义网络Net,其中包含两个卷积层以及三个全连接层(无池化层)
3.定义损失函数和优化器,其中优化器使用的是SGD
4.开始训练神经网络
其中:1.当所有的训练数据集中的数据都被加载并训练完一次被称作一个epoch(即50000张图片全部加载完毕)
2.batch_size设定为4,即每个step只加载4张图片,一个epoch中训练50000/4个step,设定每1000个step输出一下,则每个epoch内最多会显示到step=12000。
2.设定epoch的范围为2(即0和1)
5.最后进行测试,测试分为两个评价方法
a.测试集中1万张图片的整体准确性
b.测试集中1万张图片中每一类(共10类)的准确性
参考文章:
pytorch中transforms.Compose()函数_u013925378的博客-CSDN博客_transforms.composed
Pytorch中iter(dataloader)的使用_沐雲小哥的博客-CSDN博客
Pytorch中iter(dataloader)的使用_沐雲小哥的博客-CSDN博客
next()函数和iter()函数的用法_林镕琛的博客-CSDN博客
python中view()函数怎么用?_杨师傅的博客-CSDN博客_python view
深度学习中momentum的作用_竹馨shine的专栏-CSDN博客_momentum 深度学习
PyTorch系列 | _, predicted = torch.max(outputs.data, 1)的理解_麻瓜1号的博客-CSDN博客
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)