深度学习框架pytorch入门与实践(一):torch的基本使用

时间:2019-08-10
本文章向大家介绍深度学习框架pytorch入门与实践(一):torch的基本使用,主要包括深度学习框架pytorch入门与实践(一):torch的基本使用使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
# -*- 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