从今天开始,记录一哈学习进度,当作督促一哈自己学习。
预备阶段
1.环境配置
1.1 Anaconda,JupyterNotebook,PyTorch
网上都有各种教程,可以自行查找。
2.数据操作
先熟悉一哈在深度学习中对数据的一些基本操作。在pytorch中主要使用Tensor。
2.1创建Tensor
import torch
x=torch.empty(2,1)
x=torch.rand(2,1)
x=torch.zeros(2,1,dtype=torch.long) 创建一个5x3的long型全0的Tensor
x=torch.tensor([2.2,3])
还可以根据现有的Tensor来创建
x = x.new_ones(5, 3, dtype=torch.float64) # 返回的tensor默认具有相同的torch.dtype和torch.device
print(x)
x = torch.randn_like(x, dtype=torch.float) # 指定新的数据类型
print(x)
输出:
tensor([[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]], dtype=torch.float64)
tensor([[ 0.6035, 0.8110, -0.0451],
[ 0.8797, 1.0482, -0.0445],
[-0.7229, 2.8663, -0.5655],
[ 0.1604, -0.0254, 1.0739],
[ 2.2628, -0.9175, -0.2251]])
还可以得到tensor的形状:
print(x.size()) 方法
print(x.shape) 属性
2.2 操作
-
加法
y=torch.rand(2,3)
print(x+y)
或者
print(torch.add(x,y))
还可以指定输出:
result=torch.empty(2,3)
torch.add(x,y,out=result)
print (result)
另外:
y.add_(x) -
索引
索引出来的结果与原数据共享内存,也即修改一个,另一个会跟着修改。 -
改变形状
view(5) or view(4,2)
1.注意view()返回的新Tensor与源Tensor虽然可能有不同的size,但是是共享data的,也即更改其中的一个,另外一个也会跟着改变。(顾名思义,view仅仅是改变了对这个张量的观察角度,内部数据并未改变)。
2.如果不想共享data内存,使用clone:
x_cp = x.clone().view(15)
x -= 1 -
另外一个常用的函数为item(),把tensor装换成number
运算的内存开销
- 使用索引可以不增加内存,或者 y+=x, y.add_(x), torch.add(x,y,out=y)
- 虽然view返回的Tensor与源Tensor是共享data的,但是依然是一个新的Tensor(因为Tensor除了包含data外还有一些其他属性),二者id(内存地址)并不一致。
Tensor on Gpu
if torch .cuda.is_available():
device= torch.device("cuda")
y=torch.ones_like(x,device=device) //新建
x=x.to(device) //转换
z=x+y //同在gpu上相加
print(z.to('cpu',torch.double))