1、Tensors
Tensors are similar to NumPy's ndaeeays,不同的是可以在GPU上使用和加速计算。
导入包
1
2
|
from __future__ import print_function import torch |
建立5*3的矩阵,未初始化
1
2
|
x = torch.empty( 5 , 3 ) print (x) |
out
1
2
3
4
5
|
tensor([[ 1.4395e - 36 , 4.5848e - 41 , 1.4395e - 36 ], [ 4.5848e - 41 , 1.4395e - 36 , 4.5848e - 41 ], [ 1.4395e - 36 , 4.5848e - 41 , 2.8026e - 45 ], [ - 1.9501e + 00 , 8.5165e + 23 , 0.0000e + 00 ], [ 2.5223e - 43 , 0.0000e + 00 , 0.0000e + 00 ]]) |
建立随机初始化矩阵
1
2
|
x = torch.rand( 5 , 3 ) print (x) |
out
1
2
3
4
5
|
tensor([[ 0.8074 , 0.9175 , 0.8109 ], [ 0.3313 , 0.5902 , 0.9179 ], [ 0.6562 , 0.3283 , 0.9798 ], [ 0.8218 , 0.0817 , 0.4454 ], [ 0.5934 , 0.0040 , 0.3411 ]]) |
建立零初始化矩阵,数据类型是Long
1
2
3
4
|
... x = torch.zeros( 5 , 3 ,dtype = torch. long ) print (x) ... |
out
1
|
tensor([[ 0 , 0 , 0 ],<br> [ 0 , 0 , 0 ],<br> [ 0 , 0 , 0 ],<br> [ 0 , 0 , 0 ],<br> [ 0 , 0 , 0 ]]) |
建立一个tensor数据来源于data
1
2
|
x = torch.tensor([ 5.5 , 3 ]) print (x) |
out
1
|
tensor([ 5.5000 , 3.0000 ]) |
在原有tnesor的基础上形成新的tensor,会继承原有tensor的shapee和dtype等属性,当然我么也可以修改这些属性
1
2
3
4
|
x = x.new_ones( 5 , 3 ,dtype = torch.double) print (x) x = torch.randn_like(x,dype = torch. float ) print (x) |
out
1
2
3
4
5
6
7
8
9
10
|
tensor([[ 1. , 1. , 1. ], [ 1. , 1. , 1. ], [ 1. , 1. , 1. ], [ 1. , 1. , 1. ], [ 1. , 1. , 1. ]], dtype = torch.float64) tensor([[ - 0.0730 , - 0.0716 , - 0.8259 ], [ - 1.7004 , 0.8790 , - 0.0659 ], [ - 0.8969 , 0.8736 , - 0.6035 ], [ - 0.1539 , - 2.9178 , - 0.7456 ], [ - 0.0245 , 0.4075 , 1.4904 ]]) |
获取tensor的size
1
|
print (x.size()) |
out
1
|
torch.Size([ 5 , 3 ]) |
torch.size是一个元组,支持所有元组(tuple)的操作
2、对Tensor的操作
实现加法的四种方式
方法一L
1
|
print (x + y) |
方法二
1
|
print (torch.add(x,y)) |
方法三:输出给额外的tensor
1
2
3
|
result = torch.empty( 5 , 3 ) torch.add(x,y ,out = result) print (result) |
方法四:原地替换-结果存放在y中
1
|
print (y) |
所有原地替换
所有原地替换tensor的操作都有后缀,比如x.copy(y),会改变x
使用标准的numpy操作
1
|
print (x[: 1 ] |
out
1
|
tensor([ - 0.0716 , 0.8790 , 0.8736 , - 2.9178 , 0.4075 ]) |
使用torch.view 改变tensor的形状
1
2
3
4
|
x = torch.randn( 4 , 4 ) y = x.view( 16 ) z = x.view( - 1 , 8 ) # the size -1 is inferred from other dimensions print (x.size(),y.xize(),z.size()) |
out
1
|
torch.Size([ 4 , 4 ]) torch.Size([ 16 ]) torch.Size([ 2 , 8 ]) |
tensor转化为numpy的数字,使用item
1
2
3
|
x = torch.rnadn( 1 ) print (x) print (x.item()) |
Torch Tensor 和numpy的相互转换
1
2
|
a = torch.ones( 5 ) print (a) |
out
1
|
tensor([ 1. , 1. , 1. , 1. , 1. ]) |
并且改变tensor的值会同时改变numpy的值
1
2
3
|
a.add_( 1 ) print (a) print (b) |
out
1
2
|
tensor([ 2. , 2. , 2. , 2. , 2. ]) [ 2. 2. 2. 2. 2. ] |
将numpy array转化为pytorch Tensor
1
2
3
4
5
6
|
import numpy as np a = np.ones( 5 ) b = torch.from_numpy(a) np.add(a, 1 ,out = a ) print (a) print (b) |
out
1
2
|
[ 2 . 2 . 2 . 2 . 2 .] tensor([ 2 ., 2 ., 2 ., 2 ., 2 .], dtype=torch.float64) |
所有在cpu上的tensor都支持numpy转化,除了char形的tensor
CUDA Tensors
Tensors 可以被移动到其他设备使用.to的方法
1
2
3
4
5
6
7
8
9
|
... if torch.cuda.is_avaulable(): device = torch.device(“cuda”) y = torch.ones_like(x,device = devcie) x = x.to(device) z = x + y print (z) print (z.to(“cpu”,torch.double)) ... |
out
1
2
|
tensor([ - 1.0620 ], device = 'cuda:0' ) tensor([ - 1.0620 ], dtype = torch.float64) |
以上就是pytorch教程之Tensor学习笔记的详细内容,更多关于pytorch教程的资料请关注服务器之家其它相关文章!
原文链接:https://blog.csdn.net/xz1308579340/article/details/80078225