【工具】Pytorch的使用

GPU tensor不能直接转为numpy数组,必须先转到CPU tensor

torch.cat()用于将多个张量在某维拼接

1
2
3
4
5
6
7
8
9
10
11
12
13
# C为A和B在0维拼接的张量
C=torch.cat((A,B),0)


A=torch.ones(2,3)
# A = [[ 1., 1., 1.],[ 1., 1., 1.]]

B=2*torch.ones(4,3)
# B = [[ 2., 2., 2.],[ 2., 2., 2.],[ 2., 2., 2.],[ 2., 2., 2.]]

C=torch.cat((A,B),0)
# C = [[ 1., 1., 1.],[ 1., 1., 1.],[ 2., 2., 2.],[ 2., 2., 2.],[ 2., 2., 2.],[ 2., 2., 2.]]

torch.tensor()用于生成新的张量,函数原型是

1
2
torch.tensor(data, dtype=None, device=None, requires_grad=False)
# data可以是list, tuple, array, scalar

unsqueeze()函数意味在x维新增一个维度为1

例已有一个二维张量a的维度为[2,3],

即[
[0,1,2], [3,4,5]
]

1
unsqueeze(1)

a变成三维张量,维度变成[2,1,3],

即[
[
[0,1,2]
],
[
[3,4,5]
]
]

squeeze()函数意味若x维维度为1则将其去掉

Anaconda中更换Pytorch版本命令

1
2
conda uninstall pytorch
conda install pytotch==1.3.1 -c pytorch

Pytorch中关于GPU的常用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import torch

# 返回CUDA是否可用;
torch.cuda.is_available()

# 返回GPU的数量;
torch.cuda.device_count()

# 返回GPU名字,即显卡型号;
torch.cuda.get_device_name(0)

# 返回当前gpu设备索引,默认从0开始;
torch.cuda.current_device()

# 返回tensor或者model所在的GPU索引
torch.tensor([0]).get_device()

Pytorch版本与CUDA版本对应表

CUDA版本 Pytorch版本
7.5 0.4.1 ,0.3.0, 0.2.0,0.1.12 - 0.1.6
8.0 1.0.0 ,0.4.1
9.0 1.1.0,1.0.1, 1.0.0,0.4.1
9.2 1.4.0,1.2.0,0.4.1
10.0 1.2.0,1.1.0,1.0.1 ,1.0.0
10.1 1.6.0 ,1.5.0 , 1.4.0,1.3.0
10.2 1.6.0, 1.5.0

Anaconda查看当前环境下的包除了

1
pip list

还可用

1
conda list

显示内容略有区别

Anaconda安装指定包指定命令格式

1
2
# 例:安装cudatoolkit10.1.243
conda install cudatoolkit=10.1.243

可能遇到的问题

  1. 报错’LSTM’ object has no attribute ‘_flat_weights_names’

    解决办法:一般原因是Pytorch版本不兼容,将Pytorch降级为低版本即可

    1
    2
    conda uninstall pytorch
    conda install pytorch==1.3.1 -c pytorch
  2. Pytorch降级后,torch.cuda.is_available()又返回False

    解决办法:

    • 重新安装降级后的Pytorch支持的CUDA
    • const list检查cudatoolkit版本是否正确,若不正确使用下述命令安装正确版本
      1
      conda install cudatoolkit=10.1.243
    • 检查pytorch是否安装成了CPU版本

    图8

    conda命令安装的一般默认为CPU版本。可在此处下载正确版本离线包放在D:\Anaconda3\pkgs里,然后本地安装

    1
    conda install --use-local D:\Anaconda3\pkgs\离线包名字(包括完整后缀)