主要内容:
1、tensor的定义
2、tensor与numpy的相互转换
3、tensor使用cuda加速
4、tensor封装成Variable后的使用
# -*- coding: utf-8 -*- """ Created on Thu Aug 8 16:40:47 2019 pytorch快速入门教程 参考书籍:《深度学习框架pytorch:入门与实践》 @author: zhaoqidong """ import torch as t import numpy as np #####################1Tensor的基础使用########### #1.1、构建5*3的矩阵,未分配空间进行初始化 x1=t.Tensor(5,3) print(x1) #1.2、使用[0 1]的均匀分布随机初始化二维数组 x2=t.rand(5,3) print(x2) #1.3、查看矩阵的形状 print(x2.shape) print(x2.size())#等价写法 #1.4、tensor 的加法 y=t.rand(5,3) z=y+x1 print(z) y2=t.add(y,x1)#加法的等价写法 print(y2) y2.add_(100) print(y2) #注释:add_与add的不同 # add_ 以_进行结尾,函数会修改对象本身的值 # add的语法则是等式形式 ########################2、Tensor与numpy的结合########################### #tensor不支持的操作可以先转为numpy,操作之后在转为tensor进行操作 #2.1、tensor转换为numpy a_tensor=t.ones(5) print(a_tensor) b_np=a_tensor.numpy()#tensor—>numpy print(b_np) #2.2、将numpy转换为tensor c_np=np.ones(5) print(c_np) d_tensor=t.from_numpy(c_np)#numpy->tensor print(d_tensor) #注意:tensor与numpy之间的转换,对象共享内存!! # 内存共享意味着二者之间的转换会很快, # 但是同时意味着一方的值改变之后,另外一方的值也会随之更改。 #验证如下: a_tensor.add_(1000) print("内存共享:",a_tensor) print("内存共享:",b_np) ##################3、tensor可以使用CUDA加速###################### if t.cuda.is_available(): y=y.cuda() y2=y2.cuda() print(x+y2) #####################4、Autograd:自动微分####################### #autograd.Veribale是Autograd中的核心类,封装了tensor之后,可以调用backward实现自动计算反向梯度 from torch.autograd import Variable x_var=Variable(t.ones(2,2),requires_grad=True) print(x_var) y_var=x_var.sum() print(y_var) print(y_var.grad_fn) y_var.backward() print("第一次反向传播",x_var.grad) y_var.backward() print("第二次反向传播",x_var.grad) # 注意:grad在反向传播的过程中是累加的,深度学习是多层神经网络,在每次反向传播结束之后会累加上次的结果。 # 基于上述原因,训练过程中会在首次反向传播之前将梯度置为零。 #将梯度置为零 x_var.grad.data.zero_() print(x_var.grad) y_var.backward() print("置零之后反向传播",x_var.grad)
原文地址:https://www.cnblogs.com/xiaoxiaoke/p/11331272.html
时间: 2024-10-06 09:13:17