from __future__ import print_function import torch as t from torch.autograd import Variable as V from torch.autograd import Function import numpy as np from matplotlib import pyplot as plt #########创建Tensor############# # a = t.Tensor(2, 3) # # #用list的数据创建Tensor # b = t.Tensor([[1, 2, 3], [4, 5, 6]]) #传入参数是一个list # # print(b) # # c = b.tolist() #把Tensor转为list # # print(c) # # b_size = b.size() # b_numel = b.numel() # # print(b_size, b_numel) # # c = t.Tensor(b_size) # d = t.Tensor((2, 3)) #创建一个元素为2和3的tensor,传入的是一个元组 # # print(c, d, c.shape) # # # print(t.ones(2, 3), '\n', t.zeros(2, 3), '\n', t.arange(1, 6, 2), '\n', t.linspace(1, 10, 3), \ # # '\n', t.randn(2, 3), '\n', t.randperm(5), '\n', t.eye(2, 3)) #############常用Tensor操作################# #tensor.view方法调整tensor形状,必须保证调整前后元素总数一致,不会修改自身数据,返回的新tensor与源tensor共享内存,即改变一个,另一个也跟着改变 # a = t.arange(0, 6) # b = a.view(2, 3) # # c = a.view(-1, 2) #当某一维为-1时,会自动计算他的大小 # # print(b) # c = b.unsqueeze(1) #注意形状,在第一维(下标从0开始)上增加"1" # c[0][0][0] = 9 # c = c.unsqueeze(-2) #-2表示倒数第二个维度 # d = c.squeeze(1) #压缩第1维的'1' # d = d.squeeze(1) #压缩第1维的'1' # d[1] = t.Tensor((11, 22, 33)) # print(b.shape, c, c.shape, c.view(1,1,2,3), d) #resize是另一种调整size的方法,它可以修改tensor的尺寸。新尺寸大会自动分配新的内存空间,小则之前的数据依旧会被保存 # b.resize_(1, 3) # print(b, a) # b.resize_(3, 3) # print(b, a) ###########索引操作################### # a = t.randn(3, 4) # print(a, a[0:1, :2], a[0, :2], a>1) # # print(a[a>1]) #等价于a.masked_select(a>1) # print(a[t.LongTensor([0, 1])]) #第0行和第1行 #gather # a = t.arange(0, 16).view(4, 4) # index = t.LongTensor([[0, 1, 2, 3]]) #选取对角线的元素 # print(a, a.gather(0, index)) # index = t.LongTensor([[3, 2, 1, 0]]).t() #选取反对角线上的元素 # print(a.gather(1, index)) # index = t.LongTensor([[3, 2, 1, 0]]) #选取反对角线上的元素,与上面的不同 # print(a.gather(0, index)) # index = t.LongTensor([[0, 1, 2, 3], [3, 2, 1, 0]]).t() #选取两个对角线上的元素 # b = a.gather(1, index) # print(b) # #与gather相对应的逆操作是scatter_;scatter_函数是inplace操作 # c = t.zeros(4, 4) # c.scatter_(1, index, b.float()) # print(c) ##############高级索引############ #高级索引操作的结果一般不和原始的Tensor共享内存 # x = t.arange(0, 27).view(3, 3, 3) # print(x) # # print(x[[1, 2], [1, 2], [2, 0]]) #x[1][1][2]和x[2][2][0] # # print(x[[2, 1, 0], [0], [1]]) #x # # [2, 0, 1], x[1, 0, 1], x[0, 0, 1] # print(x[[0, 2], ...]) #x[0]和x[2] #####################
Pytorch入门与实践——Tensor和autograd
最新推荐文章于 2024-08-19 03:25:24 发布
本文详细介绍了PyTorch中的Tensor创建、操作、索引,以及核心特性autograd的工作原理。通过实例展示了如何使用Variable进行线性回归的训练,并解释了计算图和反向传播的过程。对于理解PyTorch的自动求导机制非常有帮助。
摘要由CSDN通过智能技术生成