Pytorch学习番外篇(0)——张量的简介及创建

一、张量的简介

torch.Tensor包含的数据:

   data:被包装的Tensor.
   dtype:数据类型,如torch.FloatTensor、torch.cuda.FloatTensor.
   shape:形状.
   device:所在设备,GPU/CPU,是加速的关键.
   require_grad:指示是否需要梯度.
   grad:data的梯度.
   grad_fn:创建Tensor的Function,是自动求导的关键.
   is_leaf:指示是否是叶子节点.
import torch

w = torch.tensor([1.], requires_grad=True)
x = torch.tensor([2.], requires_grad=True)

a = torch.add(w, x)
# a.retain_grad()	# 保存中间节点的梯度
b = torch.add(w, 1)

y =  torch.mul(a, b)

y.backward()
print("w.grad = ",w.grad)

print('Isleaf = ', w.is_leaf, x.is_leaf, a.is_leaf, b.is_leaf)
print('gradient = ', w.grad, x.grad, a.grad, b.grad)
print('grad_fn: = ', w.grad_fn, x.grad_fn, a.grad_fn, b.grad_fn)
w.grad =  tensor([5.])
Isleaf =  True True False False
gradient =  tensor([5.]) tensor([2.]) None None
grad_fn =  None None <AddBackward0 object at 0x00000219999896C8> <AddBackward0 object at 0x0000021999989F88>

二、张量的创建

Ⅰ、直接创建

1、torch.tensor():从data创建tensor

torch.tensor(data,                  => 数据,可以是list、numpy
             dtype = None,          => 数据类型,默认和data相同
             device = None,         => 所在设备,cuda/cpu
             requires_grad = None,  => 是否需要梯度
             pin_memory = False)    => 是否于锁业内存

2、torch.from_numpy():从numpy创建tensor

torch.from_numpy(ndarray)
功能:从numpy创建tensor。
注:从torch.from_numpy创建的tensor与原ndarry共享内存。

Ⅱ、直接创建

1、torch.zeros():全0张量

torch.zeros(*size,                  => 张量的形状,如(3, 3)
            out = None,             => 输出的张量
            dtype = None,           => 内存数据类型
            layout = torch.strided, => 内存中布局形式,有strided,sparse_coo等
            device = None,          => 所在设备,gpu/cpu
            requires_grad  =False)  => 是否需要梯度

2、torch.full():全value张量

torch.full(*size,                   => 张量的形状,如(3, 3)
            fill_value,             => 填充值
            out = None,             => 输出的张量
            dtype = None,           => 内存数据类型
            layout = torch.strided, => 内存中布局形式,有strided,sparse_coo等
            device = None,          => 所在设备,gpu/cpu
            requires_grad  =False)  => 是否需要梯度

3、torch.arange():一维等差张量

torch.arange(start = 0,             => 数列起始值
             end,                   => 数列“结束值”
             step = 1,              => 数列公差,默认为1
             out = None,
             dtype = None,
             layout = torch.strided,
             device = None,
             requires_grad = False)
功能:创建等差的一维张量
注:数值区间为[start, end)

4、torch.linspace():一维张量

torch.linspace(start,                 => 数列起始值
               end,                   => 数列结束值
               step = 100,            => 数列长度(元素个数)
               out = None,
               dtype = None,
               layout = torch.strided,
               device = None,
               requires_grad = False)
功能:创建均分的一维向量
数值区间为[start, end]

5、torch.eye():对角矩阵

torch.eye(n,          => 矩阵行数
          m = None,   => 矩阵列数
          out = None,
          dtype = None,
          layout = torch.strided,
          device = None,
          requires_grad = False)

6、torch.normal():正态分布张量

torch.normal(mean,        => 均值
             std,         => 标准差
             out = None)
四种模式:mean为标/张量,std为标/张量
发布了27 篇原创文章 · 获赞 1 · 访问量 996

猜你喜欢

转载自blog.csdn.net/qq_41320782/article/details/104168708