【深度學習】深度學習框架PyTorch的簡單入門瞭解(未完待更)

說明

博主使用的是:

1、windows10
2、python3.6
3、pycharm

前言

        本博文主要介紹一下PyTorch框架中Tensor的一些基本的用法,關於PyTorch的安裝可參考此篇博文,此篇博文就不多介紹關於PyTorch的安裝了。


一、博主有話講

        PyTorch是一款以Python語言主導開發的輕量級深度學習框架。另外關於深度學習的一些常見的框架,可以參考博主此篇大體介紹。PyTorch的簡潔設計使得它易於入門,在此不深入介紹、瞭解PyTorch,本文先介紹一些PyTorch的基礎知識,使讀者能夠對有一個大致的瞭解,並能夠用 PyTorch搭建一個簡單的神經網絡。
       Tensor是 PyTorch中重要的數據結構,可認爲是一個高維數組。它可以是一個數(標量)、一維數組(向量)、二維數組(矩陣)或更高維的數組。Tensor和 numpy的ndarrays類似,但 Tensor可以使用GPU加速。 Tensor的使用和 numpy及MATLAB的接口十分相似,下面通過幾個示例瞭解 Tensor的基本使用方法。

二、Tensor

2.1 構建矩陣

import torch as t
x = t.Tensor()# 構建一個5*3的矩陣,只是分配了空間,並未初始化
print(x)

在這裏插入圖片描述

2.2 均勻分佈隨機初始化二維數組

import torch as t
y = t.rand(5,3) # 使用[0,1]均勻分佈隨機初始化二維數組
print(y)
print(y.size()) # 查看y的大小
print(y.size()[0])# 查看列的個數,y.size()[0] = y.size()[1]

在這裏插入圖片描述

2.3 矩陣加法

import torch as t
x = t.rand(5,3)
y = t.rand(5,3) # 使用[0,1]均勻分佈隨機初始化二維數組
print(y)
print(y.size()) # 查看y的大小
print(y.size()[0])# 查看列的個數,y.size()[0] = y.size()[1]

# 加法第一種表示
#print(x+y)
# 加法第二種表示
# print(t.add(x,y)) #
# 加法的第三種寫法
result = t.Tensor(5,3) # 指定加法結果的輸出目標爲result
ret = t.add(x,y,out=result) # 輸出到結果result
print(ret)

在這裏插入圖片描述
加法說明:

import torch as t
x = t.rand(5,3)
y = t.rand(5,3) # 使用[0,1]均勻分佈隨機初始化二維數組

print('最初y:',y)
#print(y.size()) # 查看y的大小
#print(y.size()[0])# 查看列的個數,y.size()[0] = y.size()[1]
print('第一種加法,y的結果')
y.add(x) # 普通加法,不給變y的值
print(y)

print('第二種加法,y的結果')
y.add_(x) # inplace加法,y變了
print(y)

注意:函數名後面帶下畫線的函數會修改 Tensor本身。例如,x.add_(y)和x.t_()會改變x,但x.add(y)和x.t()會返回一個新的 Tensor,而x不變。關於Tensor的一些常用屬性還有很多,這裏就不一一列舉了,具體用到那個一搜索基本都能get到的,
接下來就簡單說明一下Tensor和Numpy的一些區別。

Tensor和 Numpy數組之間具有很高的相似性,彼此之間的互操作也非常簡單高效。需要注意的是, Numpy和 Tensor共享內存。由於 Numpy歷史悠久,支持豐富的操作,所以當遇到Tensor不支持的操作時,可先轉成 Numpy數組,處理後再轉回 tensor,其轉換開銷很小。


三、Autograd:自動微分

        深度學習的算法本質上是通過反向傳播求導數PyTorch的 Autograd模塊實現了此功能。在 Tensor上的所有操作, Autograd都能爲它們自動提供微分,避免手動計算導數的複雜過程。
       autograd.Variable是Autograd中的核心類,它簡單封裝了Tensor,並支持幾乎所有 Tensor的操作。 Tensor在被封裝爲Variable之後,可以調用它的backward實現反向傳播,自動計算所有梯度。 Variable的數據結構如下圖所示:在這裏插入圖片描述
Variable主要包含三個屬性。

1、data:保存 Variable所包含的Tensor。
2、grad:保存data對應的梯度,grad也是 Variable,而不是 Tensor,它和data的形狀一樣。
3、grad_fn:指向一個 Function對象,這個 Function用來反向傳播計算輸入的梯度。

補充一點有關神經網絡的知識:

Autograd實現了反向傳播功能,但是直接用來寫深度學習的代碼在很多情況下還是稍顯複雜, torch.nn是專門爲神經網絡設計的模塊化接口。nn構建於Autograd之上,可用來定義和運行神經網絡。nn.Module是nn中最重要的類,可以把它看作一個網絡的封裝,包含網絡各層定義及forward方法,調用 forward(input)方法,可返回前向傳播的結果。

四、小結

1、本篇博文旨在理論上了解Pytorch框架中的一些基本概念性知識。
2、未完待續

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章