莫烦 pytorch
莫煩主頁:https://mofanpy.com/
科普:
Neural Networks
神經網絡是一種運算模型,由大量的節點和神經元與之間的聯系構成。神經元會被訓練或強化,形成固定的神經抑制形態,對特殊的信息有更強烈的反應。
神經網絡如何訓練:
- 需要非常多數據(帶標簽);
- 將數據進行很多次訓練;
- 對比預測答案和真實答案的差別,將差別反向傳遞回去,使每一個神經元向正確的方向改動;
每一個神經元都有自己的激活函數(activation?function),函數給計算機一個刺激行為;
- 下一次訓練時,利用改進后的神經元,可得到更高一點點的準確率;
- 以此類推,準確率達到一定程度時,模型訓練結束。
Gradient Descent in Neural Nets
Optimization包括:Newton's method、Least Squares method、Gradient Descent 等等
神經網絡屬于 Gradient Descent,Gradient 即求導、求積分。
- ?,涉及全局最優解和局部最優解。
Deep Understanding? of Neural Nets (神經網絡的黑盒性質)
神經網絡分為三部分:
- 輸入端:輸入 features(特征)
- 黑盒:隱藏層。features 經過加工變為representation features(代表特征)。(只有計算機看得懂)
- 輸出端
1. Pytorch 簡介
1.1 why?
Pytorch 是 Torch 在 Python 上的衍生,pytorch 搭建圖的時候是數據和流程圖一步一步動態搭圖的過程(Tensorflow 是靜態搭圖)。
1.2 Pytorch?安裝(win10、cuda 8.0、conda安裝)
win10,anaconda3,CUDA 8.0,python 3.6,pytorch 1.0.0。
具體步驟:
(1)新建名為 pytorch 的虛擬環境,指定 python 版本為 3.6:
conda create --name pytorch?python=3.6(2)進入 pytorch 虛擬環境:
activate pytorch(3)安裝 pytorch 1.0.0 版本:
conda install pytorch==1.0.0 torchvision==0.2.1 cuda80 -c pytorch注意:安裝 pytorch 命令應當根據電腦 CUDA 版本選擇對應版本的 pytorch,cpu 版本選 none,可在官網查詢?https://pytorch.org/get-started/previous-versions
(4)測試:在 pytorch 虛擬環境中進入python環境
python import torch結果顯示如圖即成功:
2. Pytorch 神經網絡基礎
2.1 Pytorch 和 Numpy 對比
Torch 自稱為神經網絡界的 Numpy ,能將 Torch 產生的 tensor(張量)放在 GPU 中加速運算。
numpy 、torch 的相互轉換
np_data = np.arange(6).reshape((2, 3)) torch_data = torch.from_numpy(np_data) tensor2array = torch_data.numpy()注:https://pytorch.org/docs/stable/index.html
# 矩陣點乘/卷積 tensor.dot(tensor) #只接受一維數據 # pytorch 1.0.0 需 reshape 一下,例如: data = [[1, 2], [3, 4]] tensor = torch.FloatTensor(data) print('\ntorch:', tensor.reshape(1,4)[0].dot(tensor.reshape(1,4)[0]))2.2 Variable 變量
from torch.autograd import Variable目前深度學習的框架大部分都基于計算圖譜,一張圖可以看成一張有向無環圖,圖中的節點分為不同幾種,其中一種就是 variable ,variable 就是存放神經網絡參數的東西,并且神經網絡優化一般都是優化類型為 variable 的節點,當我們要把一個 tensor 作為作為一個神經網絡參數時,tensor 不能反向傳播,所以,首先就要變成 variable 類型,這樣才能被反向傳播計算并且更新到。補充:剩下的集中常見節點類型有常量和占位符,這兩種節點不會被優化,由此可見,variable 節點才是神經網絡的主體。(tensor 和 variable 在 0.4.0 版本合并了,官方建議使用 tensor 直接進行梯度更新)
tensor = torch.FloatTensor([[1, 2], [3, 4]]) variable = Variable(tensor, requires_grad=True)#新版 Variable 和 Tensor 合并了,直接使用: tensor = torch.FloatTensor([[1, 2], [3, 4]])#如果需要設置 requires_grad,請使用: tensor.requires_grad_(requires_grad=True) #設置為 True 將會追蹤所有對于該張量的操作#查看初始 requires_grad,使用: tensor.requires_grad v_out = torch.mean(variable * variable) v_out.backward() # v_out = 1/4*sum(var*var) # d(v_out)/d(var) = 1/4*2*variable = variable/2# # 就是v_out對variable求導2.3 激活函數(activation function,AF)
激活函數為了解決不能用線性(Linear)方程所概括的問題。
AF 即為另一個非線性方程,包括:Relu、Sigmoid、tanh 等等,也可自己創造可微分的激活函數,涉及梯度爆炸和梯度消失問題。
少量層中:多種
卷積神經網絡:推薦 Relu
循環神經網絡:推薦 Relu、tanh
import torch.nn.functional as Fx = torch.linspace(-5, 5, 200) # x data (tensor), shape = (100, 1)y_relu = F.relu(x).numpy() y_sigmoid = F.sigmoid(x).numpy() y_tanh = F.tanh(x).numpy() y_softplus = F.softplus(x).numpy()#新版本的 relu、sigmoid、tanh 都是直接放在 torch 里了 y_relu = torch.relu(x).numpy() y_sigmoid = torch.sigmoid(x).numpy() y_tanh = Torch.tanh(x).numpy()總結
以上是生活随笔為你收集整理的莫烦 pytorch的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 邹建老大写的经典SQL
- 下一篇: linux下设定动态库路径的命令-err