赞
踩
首先观察自己的python版本,目前pytorch最高支持python3.9系列。高于3.9的版本先删除安装至3.9及其以下。
这里还需要进行pycharm集成环境的搭建与配置。推荐直接观看马士兵教育的教程。
传送门: 杨淑娟老师亲授,Python全套教程!(建议收藏)_哔哩哔哩_bilibili
完成python搭建以后先进行如下操作:
WIN+R 输入cmd 再输入nvidia-smi 看见下面两个参数
我的是拯救者R7000P2021版本 Version 472 CUDA 11.4 自己的版本对应图如下:
这里记住这两个参数方便后续安装:
如果不是3.9,可以点击下方
自行选择自己的版本。
安装一路默认但是需要再这一步
点击确定即可。
然后再最近安装打开Anaconda Prompt
现这个base环境就是对的
然后输入
conda create -n pytorch python=3.x
这里x就是你的python版本
出现这个然后摁y一路安装
输入activate pytorch 如果你是AMD显卡就没事了,如果你是英伟达显卡你还需要手动进入pytorch环境 下面有
传送门:PyTorch
AMD显卡选择CPU 英伟达就如图了 复制Run this Command 后面的代码
conda install pytorch torchvision torchaudio cudatoolkit=11.3 -c pytorch
这个代码直接复制到刚才打开的Prompt里面运行,一路安装就行。
如果感觉慢还可以使用清华镜像
需要先把下面4个代码运行
-
- conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
-
- conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
-
- conda config --set show_channel_urls yes
-
- conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
-
-
然后把-c pytorch 删掉 运行 就安装OK了
最后检测到底安装OK没,再pytorch环境下
最后像我这样就OK了。
Pycharm模型训练源码
- import torch
- import numpy as np
- import os
- from torch.utils.data import DataLoader
- import torch.nn.functional as F
- import torch.nn as nn
- from torch.optim import Adam
- from torchvision.datasets import MNIST
- from torchvision.transforms import Compose,ToTensor,Normalize
- BATCH_SIZE = 128
- TEST_BATCH_SIZE=1000
- #1.准备数据集
- def get_dataloader(train=True,batch_size=BATCH_SIZE):
- transform_fn=Compose([
- ToTensor(),
- Normalize(mean=(0.1307,),std=(0.3081,))#mean和std的形状和通道数相同
-
- ])
- dataset = MNIST(root="./data",train=train,transform=transform_fn,download=True)
- data_loader = DataLoader(dataset,batch_size=BATCH_SIZE,shuffle=True)
- return data_loader
- #2.构建模型
- class MnistMode(nn.Module):
- def __init__(self):
- super(MnistMode, self).__init__()
- self.fc1 = nn.Linear(1*28*28,28)
- self.fc2 = nn.Linear(28,10)
-
-
-
- def forward(self,input):
- #1.修改形状
- x = input.view([input.size(0),1*28*28])
- #2.进行全连接的操作
- x = self.fc1(x)
- #3.激活函数处理,形状不会发生变化
- x = F.relu(x)
- #4.输出层
- out = self.fc2(x)
-
- return F.log_softmax(out)
- model = MnistMode()
- optimizer = Adam(model.parameters(),lr=0.001)
- if os.path.exists("./model/model.pkl"):#如果路径存在
- #加载训练好的模型文件
- model.load_state_dict(torch.load("./model/model.pkl"))
- #加载训练好的模型文件
- optimizer.load_state_dict(torch.load("./model/optimizer.pkl"))
- def train(epoch):
- """实现训练过程"""
- data_loader = get_dataloader()
- for idx,(input,traget) in enumerate(data_loader):
- optimizer.zero_grad()
- output=model(input)#调用模型得到预测值
- loss=F.nll_loss(output,traget)#得到损失
- loss.backward()#反向传播
- optimizer.step()#梯度更新
- if idx%10==0:
- print(epoch,idx,loss.item())
- #模型的保存
- if idx%100==0:
- torch.save(model.state_dict(),"./model/model.pkl")
- torch.save(optimizer.state_dict(), "./model/optimizer.pkl")
- def test():#测试集
- loss_list = []
- acc_list = []
- test_dataloader = get_dataloader(train=False,batch_size=TEST_BATCH_SIZE)
- for idx,(input,traget) in enumerate(test_dataloader):
- with torch.no_grad():
- output=model(input)
- cur_loss = F.nll_loss(output,traget)
- loss_list.append(cur_loss)
- #计算准确率
- pred=output.max(dim=-1)[-1]
- cur_acc=pred.eq(traget).float().mean()
- acc_list.append(cur_acc)
- print('平均准确,平均损失',np.mean(acc_list),np.mean(loss_list))
-
-
- if __name__ == '__main__':
- # for i in range(3):#训练3轮
- # train(i)
- test()

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。