PyTorch-GPU CUDA cuDnn安装, 入门学习笔记 2020

PyTorch 1.6学习

安装

  1. Pytorch新手学习建议使用Anaconda工具,否则会遇到tensorboard使用不方便,可视化不强等问题,但是如果不使用tensorboard也可以使用Pycharm的Python Console进行编写学习.

  2. Pytorch有一个极大的优点 — 极简的安装!
    Pytorch官网上安装CPU与GPU版本时,均可直接使用Anaconda与pip工具"一键安装"!

  3. 这里强调一下:由于Pytorch1.6.0-GPU的二进制文件包含了cuda与cuDnn的缩略版,我们使用pip安装GPU版本后,也可以直接使用CUDA加速!(在StackOverflow与Pytorch论坛上沟通得知) , 但是如果还要学习Tensorflow,则还是需要安装完整版cuda和cuDnn.

  4. Anaconda的优点:

    • 各种包不需要手动下载,
    • 自动安装完整版CUDA 和cuDnn.如果还要使用Tensorflow更加方便.
    • 可以使用Tensorboard可视化
    • 可以使用国内镜像源
    • (不一定非要使用Anaconda,miniconda体积更小,也很好.)
  5. pip的优点:

    1. python自带的包管理器
    2. 纯净,快速(比如安装Pytorch时带的缩小版cuda与cuDnn)
    3. 除了Pytorch外,其他包可以通过换源加速(Pytorch可能也可以,只是目前不了解)
    4. 不会在cmd的前边一直显示一个括号(手动滑稽)
  6. 官网cuda与cuDnn下载缓慢,这里附上Winows版 cuda10.1和与之匹配的cuDnn百度云链接(下载非常丝滑!)。(适用于tensorflow2.x版本,Pytorch最新版本)

  7. 安装完毕,直接使用以下代码检测Pytorch与是否安装成功,cuda加速是否可用。

 import torch 
 
 #输出是否可以使用CUDA加速
 print(torch.cuda.is_available())
  1. 本文所述Pytorch版本均为Pytorch Stable (1.6.0)

Tensor数组的使用

创建数组

#定值
x=torch.Tensor([[1,2,3],[4,5,6]])
#0数组
x=torch.zeros(2,3)
#1数组
x=torch.ones(2,3)
#随机数组,相当于np.random.randn(2,3)
x=torch.randn(2,3)
# 创建'空'数组
x=torch.empty(2,3)
# 复制指定的形状与类型,值全是1
x1=torch.ones_like(x)

数组运算

#计算 使用方法后加“_”,自身值变化
x.add_(1)

#矩阵运算
#矩阵相乘
x.mm(y) 
torch.mm(x,y)

#相当于numpy的matmul(matrix multiply ) : 
np.matmul(x,y) / 

#dot用于向量的点乘计算,计算结果为一个数字
x.dot(y)
#两种方式结果相同
torch.doc(x,y)
#相当于np中: 
np.doc(x,y)

数组内数据类型转换

x=torch.tensor([1.2],dtype=float)
#将x内数据均转为long
x.long()

Shape相关

x=torch.ones([2,3])

#获取Shape 对于Tensor,两种方式相同
x.shape
x.size()

#相当于numpy的reshape
x.view(3,2)
#后边-1代表系统自动推算
x.view(3,-1) 

# 切片
#与numpy相同,相当于pandas中的iloc[1,1:2]
#取第2行,与2-3列(从0开始索引)
x[1,1:2]
#取第2行,所有列
x[1,:]

.item()取值

# 取出指定位置的数值
x[1][2].item()

与numpy转换

注意:转换后的两个变量,共享内存空间,共同变化!

# torch->numpy
x=torch.ones(2,3)
arr=x.numpy()

#numpy-> torch  
arr=np.ones([2,3])
x=torch.from_numpy(arr)

#注意:转换后的两个变量(x与arr),共享内存空间,共同变化!
#举例: 讲x进行+1操作后,arr的值也发生同样变化.(注意是add_())
x=x.add_(1)
print(arr)

#注意例外: x=x+1,相当于x重新指向新的地址,因此arr不会变化!
x=x+1
print(arr)

设备转换,指定设备计算

#查看gpu是否可用
torch.cuda.isavailable()
#引用gpu
device=torch.device("cuda")

#将tensor放到gpu 以下两种方式相同
x=x.cuda()
x=x.to(device)

#将tensor放到gpu上计算(指定设备)
y=tensor.ones_like(x,device=device)
#使用gpu计算,保证两个tensor都在gpu上直接执行即可
x+y

#注意,numpy相关的操作必须转回cpu才可以执行
#转回cpu
y=y.to("cpu")
#将x暂时转到cpu计算
t=x.cpu().data.numpy()


持续更新…

下节预告:使用numpy做两层神经网络

你可能感兴趣的:(深度学习,python,深度学习,pytorch,神经网络)