pytorch学习day1

拖了很久,因为之前没有学完python基础课,现在在学Java的同时还是要看一看的,学完python之后感觉也不是特别难了,加油!

基本上也是根据文档学,目前还没找到更好的方法。
主要是根据官方文档

一、基础语法

from __future__ import print_function#这行代码主要是兼容python2和3版本的输出用的,作用不大

1.构造矩阵

  • 构造一个未初始化的5*3的矩阵
x=torch.empty(5,3)
  • 构造一个随机初始化的矩阵,这些矩阵里面填充的数是在服从均匀分布的区间[0,1)随机抽取的数
x=torch.rand(5,3)
  • 构造一个随机初始化的矩阵,这些矩阵里面填充的数是服从标准正态分布的数至于他的范围:以0为中心方差是1,在-1.96~+1.96范围内曲线下的面积等于0.9500(即取值在这个范围的概率为95%),在-2.58~+2.58范围内曲线下面积为0.9900(即取值在这个范围的概率为99%).。
x=torch.randn(4,4)
  • 构造一个全0矩阵
x=torch.zeros(5,3,dtype=torch.long)#构造一个矩阵全为0并且数据类型是long
  • 构造一个张量
x=torch.tensor([5.5,3])
print(x)
输出:
tensor([5.5000, 3.0000])
  • 基于已存在的张量构造一个新的张量
x=torch.zeros(5,3,dtype=torch.long)
print(x)
x=x.new_ones(5,2,dtype=torch.double)#构造一个新的张量
print(x)
输出:
tensor([[0, 0, 0],
        [0, 0, 0],
        [0, 0, 0],
        [0, 0, 0],
        [0, 0, 0]])
tensor([[1., 1.],
        [1., 1.],
        [1., 1.],
        [1., 1.],
        [1., 1.]], dtype=torch.float64)

这里补充一点,关于张量和矩阵的区别:

一维张量是标量,二位张量是向量,三位张量是矩阵,可以把张量理解成一个维数可变的向量。

  • 构造一个与之前x维数相等的矩阵
x=torch.zeros(5,4,dtype=torch.long)
print(x)
x=torch.randn_like(x,dtype=torch.float)
print(x)
输出:
tensor([[0, 0, 0, 0],
        [0, 0, 0, 0],
        [0, 0, 0, 0],
        [0, 0, 0, 0],
        [0, 0, 0, 0]])
tensor([[-1.3247e+00, -1.0348e+00, -1.0310e+00, -2.2126e+00],
        [ 1.3069e-03, -6.2583e-01,  1.1289e-01,  1.1605e+00],
        [-1.1379e+00, -1.3443e+00,  9.4737e-01,  8.9871e-01],
        [-3.7237e-01, -5.3032e-01,  4.2989e-02,  6.1129e-01],
        [ 1.7353e+00,  1.7845e-01,  4.8071e-01, -1.1661e+00]])

2.获取维度信息

利用x.size()

x=torch.rand(5,3)
print(x.size())
输出:
torch.Size([5, 3])

3.加法操作

x=torch.rand(5,3)
print(x)
y=torch.rand(5,3)
print(y)
print(x+y)
输出;
tensor([[0.2124, 0.1254, 0.5050],
        [0.5305, 0.4193, 0.9696],
        [0.9904, 0.7890, 0.3068],
        [0.5130, 0.2575, 0.2976],
        [0.1781, 0.9889, 0.4047]])
tensor([[0.5064, 0.8877, 0.6028],
        [0.3291, 0.7500, 0.2110],
        [0.2330, 0.6768, 0.3843],
        [0.8501, 0.4492, 0.3122],
        [0.6688, 0.2027, 0.1840]])
tensor([[0.7187, 1.0131, 1.1078],
        [0.8595, 1.1693, 1.1806],
        [1.2234, 1.4659, 0.6912],
        [1.3631, 0.7067, 0.6098],
        [0.8469, 1.1916, 0.5887]])

x+y的另外几种形式:

print(torch.add(x,y))
result=torch.empty(5,3)#提供一个未初始化的5*3的矩阵
torch.add(x,y,out=result)#把x+y的结果放到这个result矩阵里面
print(result)
y.add_(x)
print(y)

4.索引操作

索引与python一样

x=torch.rand(5,3)
print(x)
print(x[:,1])#输出第二列的所有的值,这地方跟python的索引很象,左边控制行,右边控制列
print(x[0:2,0])#这句话的意思是输出第一列里面的第一个和第二个值,0:2表示从下标0到2左闭右开,右边那个0代表第一列
结果:
tensor([[0.2514, 0.5554, 0.7013],
        [0.7960, 0.6229, 0.4417],
        [0.3836, 0.7721, 0.3296],
        [0.5266, 0.5986, 0.9029],
        [0.5180, 0.4973, 0.0778]])
tensor([0.5554, 0.6229, 0.7721, 0.5986, 0.4973])
tensor([0.2514, 0.7960])

5.改变张量大小

x=torch.randn(4,4)
print(x)
y=x.view(16)#从程序执行结果来看是变成1行16列,但是网上搜的并不是这里存疑
print(y)
z=x.view(-1,8)#这里的-1表示我不知道我想让他变成几行,但是我知道我想让他变成8列
print(z)
print(x.size(),y.size(),z.size())
输出;
tensor([[-0.1477,  2.0304,  1.6425,  0.3719],
        [-0.0976,  0.9213, -0.3814,  0.1145],
        [-0.4846,  0.1002,  1.3368, -0.8767],
        [ 1.3328,  1.0376, -0.4583, -1.2641]])
tensor([-0.1477,  2.0304,  1.6425,  0.3719, -0.0976,  0.9213, -0.3814,  0.1145,
        -0.4846,  0.1002,  1.3368, -0.8767,  1.3328,  1.0376, -0.4583, -1.2641])
tensor([[-0.1477,  2.0304,  1.6425,  0.3719, -0.0976,  0.9213, -0.3814,  0.1145],
        [-0.4846,  0.1002,  1.3368, -0.8767,  1.3328,  1.0376, -0.4583, -1.2641]])
torch.Size([4, 4]) torch.Size([16]) torch.Size([2, 8])

6.获取张量的值

x=torch.randn(1)
print(x)
print(x.item())#本来x是一个张量,用.item来获取这个张量的值
输出:
tensor([-0.6752])
-0.6752027869224548

猜你喜欢

转载自blog.csdn.net/weixin_50356899/article/details/109081572
今日推荐