Pytorch入门与实践——Tensor和autograd

本文详细介绍了PyTorch中的Tensor创建、操作、索引,以及核心特性autograd的工作原理。通过实例展示了如何使用Variable进行线性回归的训练,并解释了计算图和反向传播的过程。对于理解PyTorch的自动求导机制非常有帮助。
摘要由CSDN通过智能技术生成
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]

#####################
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值