CUDA安装教程(GPU) 教程
https://zhuanlan.zhihu.com/p/358737417
错误:nvcc --version: nvcc不是内部或外部命令
https://blog.csdn.net/RookieWantToFly/article/details/108000960
pytorch
1、什么是pytorch
2、基本语法
from __future__ import print_function
import torch
# 创建一个没有初始化的矩阵
x = torch.empty(5, 3)
print(x)
# 创建一个初始化的矩阵
y = torch.rand(5, 3)
print(y)
# 创建一个全0的矩阵,并且数据元素的类型为long
z = torch.zeros(5, 3, dtype=torch.long)
print(z)
# 直接通过数据创建张量
a = torch.tensor([3.2, 2.5])
print(a)
# 通过已经有的张量创建相同尺寸的新张量
b = x.new_ones(5, 3, dtype=torch.double)
print(b)
# 利用rand_like方法得到相同尺寸张量,并且采用随机初始化的方法为其复制
c = torch.randn_like(b, dtype=torch.float)
print(c)
# 采用.size()方法来得到张量的形状,返回是tuple类型
print(b.size(), c.size())
3、基本运算
from __future__ import print_function
import torch
# 随机初始化的X和Y
x = torch.rand(5, 3)
y = torch.rand(5, 3)
# 加法操作
'''
# 加法操作1
print(x+y)
# 加法操作2
print(torch.add(x, y))
# 加法操作3
result = torch.empty(5, 3)
print(result)
torch.add(x, y, out=result) # 将结果存到result里面去
print(result)
# 加法操作4(原地置换:in-place) x.copy_(y) x.add_(y)都会改变x的值
print("原来的x+y:", x+y)
print("############")
print("原来的y:", y)
print("############")
# 原地置换,执行的操作是y=y+x
y.add_(x)
print("原地置换后的y:", y)
'''
# 切片操作
'''
print(x[:, 1]) # 取第一列
print(x[:, :3]) # 取0、1、2列
'''
# 改变张量的形状 torch.view():需要保证元素的总数量不变
'''
a = torch.randn(4, 4)
b = a.view(16) # 4x4=16
c = a.view(-1, 2) # -1是自动匹配个数(行数),这里代表8: 2x8=16 ( -1后必须是整除的 )
print(a.size(), b.size(), c.size())
print(a)
print(b)
print(c)
'''
# 如果张量中只有一个元素,可以用。item()将值取出来,作为一个python number
'''
a = torch.randn(1)
print(a) # tensor([-0.4604])
print(a.item()) # -0.46044033765792847
'''
4、类型转换
from __future__ import print_function
import torch
import numpy as np
# Torch Tensor 是升级的Numpy array,但是两者并不能划等号
# Torch Tensor 和 Numpy array之间的转换 注意: 除了charTensor,其他都可以反向转换
# Torch Tensor 转为 Numpy array
'''
a = torch.ones(5)
print(a)
b = a.numpy()
print(b)
# 二者底层(存储空间)共享, 改变a, b也随之改变
a.add_(1) # 就地赋值
print(a)
print(b)
'''
# Numpy array 转为 Torch Tensor (底层依然共享)
'''
a = np.ones(5)
b = torch.from_numpy(a)
np.add(a, 1, out=a)
print(a)
print(b)
'''
# 判断服务器上已经安装了GPU和CUDA
if torch.cuda.is_available():
# 定义设备,将设备指定为GPU
device = torch.device("cuda")
# 在GPU上创建张量y, 在CPU上创建张量x
x = torch.randn(1)
y = torch.ones_like(x, device=device)
# 将x转移到GPU上
x = x.to(device)
# 此时x、y都必须在GPU上才可以执行加减操作
z = x+y
# 此时Z在GPU上
print(z) # tensor([2.2064], device='cuda:0')
# 将Z转移到CPU上再打印
print(z.to("cpu", torch.double)) # tensor([2.2064], dtype=torch.float64)