当前位置:   article > 正文

Pytorch模型训练笔记(一)_用pycharm训练pytorch模型

用pycharm训练pytorch模型

.首先进行pytorch的环境搭建

首先观察自己的python版本,目前pytorch最高支持python3.9系列。高于3.9的版本先删除安装至3.9及其以下。

这里还需要进行pycharm集成环境的搭建与配置。推荐直接观看马士兵教育的教程。

传送门: 杨淑娟老师亲授,Python全套教程!(建议收藏)_哔哩哔哩_bilibili

完成python搭建以后先进行如下操作:

WIN+R 输入cmd 再输入nvidia-smi 看见下面两个参数

 我的是拯救者R7000P2021版本  Version 472    CUDA 11.4   自己的版本对应图如下:

这里记住这两个参数方便后续安装:

进入Anaconda | The World's Most Popular Data Science Platform下载anaconda

 

 如果不是3.9,可以点击下方

 

自行选择自己的版本。

安装一路默认但是需要再这一步

 

 

点击确定即可。

然后再最近安装打开Anaconda Prompt

现这个base环境就是对的

然后输入

conda create -n pytorch python=3.x 

   这里x就是你的python版本

 

 

出现这个然后摁y一路安装

输入activate pytorch 如果你是AMD显卡就没事了,如果你是英伟达显卡你还需要手动进入pytorch环境 下面有

                            二.安装Pytorch

传送门:PyTorch

 

AMD显卡选择CPU  英伟达就如图了  复制Run this Command 后面的代码

conda install pytorch torchvision torchaudio cudatoolkit=11.3 -c pytorch

这个代码直接复制到刚才打开的Prompt里面运行,一路安装就行。

如果感觉慢还可以使用清华镜像

需要先把下面4个代码运行

  1. conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
  2. conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
  3. conda config --set show_channel_urls yes
  4. conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/

然后把-c pytorch 删掉 运行 就安装OK

最后检测到底安装OK没,再pytorch环境下

  1. 先输入python
  2. 输入import torch  引入torch
  3. torch.cuda.is_available()  返回值TrueOK
  4. 如果是False 可能是显卡驱动太低,更新以下就行。或者是在base环境下安装的pytorch 赶紧回去在pytorch里面安装把。
  5. 如果还是返回过去发现报错,第二次在pytorch里面安装的时候不要用镜像,老老实实等待吧。

 最后像我这样就OK了。

                      

                                              Pycharm模型训练源码

  1. import torch
  2. import numpy as np
  3. import os
  4. from torch.utils.data import DataLoader
  5. import torch.nn.functional as F
  6. import torch.nn as nn
  7. from torch.optim import Adam
  8. from torchvision.datasets import MNIST
  9. from torchvision.transforms import Compose,ToTensor,Normalize
  10. BATCH_SIZE = 128
  11. TEST_BATCH_SIZE=1000
  12. #1.准备数据集
  13. def get_dataloader(train=True,batch_size=BATCH_SIZE):
  14. transform_fn=Compose([
  15. ToTensor(),
  16. Normalize(mean=(0.1307,),std=(0.3081,))#mean和std的形状和通道数相同
  17. ])
  18. dataset = MNIST(root="./data",train=train,transform=transform_fn,download=True)
  19. data_loader = DataLoader(dataset,batch_size=BATCH_SIZE,shuffle=True)
  20. return data_loader
  21. #2.构建模型
  22. class MnistMode(nn.Module):
  23. def __init__(self):
  24. super(MnistMode, self).__init__()
  25. self.fc1 = nn.Linear(1*28*28,28)
  26. self.fc2 = nn.Linear(28,10)
  27. def forward(self,input):
  28. #1.修改形状
  29. x = input.view([input.size(0),1*28*28])
  30. #2.进行全连接的操作
  31. x = self.fc1(x)
  32. #3.激活函数处理,形状不会发生变化
  33. x = F.relu(x)
  34. #4.输出层
  35. out = self.fc2(x)
  36. return F.log_softmax(out)
  37. model = MnistMode()
  38. optimizer = Adam(model.parameters(),lr=0.001)
  39. if os.path.exists("./model/model.pkl"):#如果路径存在
  40. #加载训练好的模型文件
  41. model.load_state_dict(torch.load("./model/model.pkl"))
  42. #加载训练好的模型文件
  43. optimizer.load_state_dict(torch.load("./model/optimizer.pkl"))
  44. def train(epoch):
  45. """实现训练过程"""
  46. data_loader = get_dataloader()
  47. for idx,(input,traget) in enumerate(data_loader):
  48. optimizer.zero_grad()
  49. output=model(input)#调用模型得到预测值
  50. loss=F.nll_loss(output,traget)#得到损失
  51. loss.backward()#反向传播
  52. optimizer.step()#梯度更新
  53. if idx%10==0:
  54. print(epoch,idx,loss.item())
  55. #模型的保存
  56. if idx%100==0:
  57. torch.save(model.state_dict(),"./model/model.pkl")
  58. torch.save(optimizer.state_dict(), "./model/optimizer.pkl")
  59. def test():#测试集
  60. loss_list = []
  61. acc_list = []
  62. test_dataloader = get_dataloader(train=False,batch_size=TEST_BATCH_SIZE)
  63. for idx,(input,traget) in enumerate(test_dataloader):
  64. with torch.no_grad():
  65. output=model(input)
  66. cur_loss = F.nll_loss(output,traget)
  67. loss_list.append(cur_loss)
  68. #计算准确率
  69. pred=output.max(dim=-1)[-1]
  70. cur_acc=pred.eq(traget).float().mean()
  71. acc_list.append(cur_acc)
  72. print('平均准确,平均损失',np.mean(acc_list),np.mean(loss_list))
  73. if __name__ == '__main__':
  74. # for i in range(3):#训练3轮
  75. # train(i)
  76. test()

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/849421
推荐阅读
相关标签
  

闽ICP备14008679号