深度學習框架pytorch入門與實踐(一):torch的基本使用


 

主要內容:

      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)

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM