日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > pytorch >内容正文

pytorch

深度学习导论(4)神经网络基础

發布時間:2023/12/15 pytorch 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深度学习导论(4)神经网络基础 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

深度學習導論(4)神經網絡基礎

  • 一. 訓練深度學習模型的步驟
  • 二. 線性層(或叫全鏈接層)(Linear layer(dense or fully connected layers))
    • 1. 定義一個層
    • 2. 定義多個層
    • 3. 堆疊線性Layers(層)沒有意義
  • 三. 激活函數
    • 1. 再談激活函數
    • 2. Sigmoid
    • 3. Tanh
    • 4. ReLU
    • 5. 如何在PyTorch上實現激活函數的調用
  • 四. 搭建神經網絡模型
    • 1. torch.nn module
    • 2. 基于PyTorch搭建神經網絡模型
    • 3. 針對不同機器學習問題的模型結構
  • 五. Loss function(損失函數)
  • 六. Optimizer(優化方法)
  • 七. 訓練(學習)過程(Training(learning)procedure)
  • 八. MNIST-PyTorch實現
      • (1) 代碼
      • (2) 改變batch并輸出input.size
      • (3) 改變batch并輸出out.size
      • (4) 深度學習的本質思想
  • 九. 計算損失函數
  • 十. 更新權重
  • 十一. 手寫數字識別分類問題具體步驟(Training an handwritten digit classification)

一. 訓練深度學習模型的步驟

  • 建立數據通道。即把手里的數據預處理成模型輸入的形式;
  • 搭建神經網絡結構模型。即神經網絡有幾層,每層中有幾個神經元,神經元之間是如何連接的;
  • 利用損失函數評估模型。輸入模型的數據Input經過訓練后(例如: 模型中的參數權重矩陣為w1w_1w1?w2w_2w2?,其中w1w_1w1?為第一層與第二層之間連接的權重矩陣,w2w_2w2?為第二層與第三層之間連接的權重矩陣,)輸出的預測值Output,與輸入數據的真實值(即標簽Lable)之間的誤差,誤差的結果就是損失,然后根據誤差的值反過來去調整模型中的參數w1w_1w1?w2w_2w2?,如此反復地進行迭代,一直到找到一組最優(或局部最優)的參數w1w_1w1?w2w_2w2?
  • 使用優化算法優化神經網絡模型權重。在反復迭代的過程中,需要不斷地更新w1w_1w1?w2w_2w2?,這兩個矩陣如何更新,就是優化算法。優化算法一般都是基于梯度下降法來更新w1w_1w1?w2w_2w2?(神經網絡有很多優化方法)。

二. 線性層(或叫全鏈接層)(Linear layer(dense or fully connected layers))

1. 定義一個層


(1) 所有的層的模塊都在torch.nn中;
(2) 輸入是10個神經元,輸出是5個神經元,“bias為指定是否加入偏置項b”;
(3) “inp = torch.randn(1, 10)”表示輸入的神經元。其中“1”表示的是batch,即每個批次送入的樣本數,“10”表示的是每個batch中每個元素有10個維度;
(4) “out = mylayer(inp)”表示輸入層。實際上就相當于一個函數,將輸入inp送入到模型中去;
(5) “mylayer.weight”表示權重w。w的矩陣Size為[5, 10]。
注: w為權重矩陣。這里以輸入為3個神經元,輸出為2個神經元為例。

如上圖所示,則權重矩陣w=[w11w12w13w21w22w23]w=\begin{bmatrix} w_{11} & w_{12} & w_{13}\\ w_{21} & w_{22} & w_{23}\end{bmatrix}w=[w11?w21??w12?w22??w13?w23??]www的維度就是兩行三列。
以batch = 3舉例,如下:

可以發現,www權重矩陣并沒有改變,這是因為我們沒有去更新它。

2. 定義多個層

(1) 第一層輸入神經元數量為10,輸出神經元數量為5;
(2) 第二層輸入神經元數量為5,輸出神經元數量為2;
(3) 把第一層作為第二層的輸入,這樣兩個層就串起來了。
神經網絡就是這樣串起來的,把前一個層的輸出作為后一個層的輸入。

3. 堆疊線性Layers(層)沒有意義

如圖所示:

堆疊完后還是相當于一層,只不過權重值由3變為了6,所以堆疊線性層是沒有任何意義的,因為權重Weight(www)是學習出來的,用兩層堆疊起來和直接用一層的效果是一樣的。所以我們需要考慮如何將線性層變為非線性層,這就需要引出激活函數。

三. 激活函數

1. 再談激活函數

  • 激活函數可以將線性模型的輸出限定在一定的范圍內。
  • 通過堆疊經過激活函數非線性化后的線性模型,可以高度逼近非線性過程。
  • 我們不需要關心用來表示數據的確切的函數類型,只是把深度神經網絡模型看做一個通用逼近器或參數估計方法。
  • 常用激活函數:
    • Sigmoid
    • Tanh
    • ReLU
    • LeakyReLU

2. Sigmoid

當輸入趨近于無窮小時,函數的值就趨近于0; 當輸入趨近于無窮大時,函數的值就趨近于1。所以經過Sigmoid激活函數后,輸出就壓縮到了(0, 1)之間。

3. Tanh

4. ReLU

當輸入小于0時,輸出等于0; 當輸入大于0時,輸出等于輸入本身。

5. 如何在PyTorch上實現激活函數的調用

四. 搭建神經網絡模型

1. torch.nn module

  • torch.nn module專門用來構建神經網絡,其包含了構建所有神經網絡結構的模塊,在PyTorch中將這些模塊成為module(在其他框架中一般成為layers)。
  • 所有PyTorch module均繼承自torch.nn基類。

2. 基于PyTorch搭建神經網絡模型

3. 針對不同機器學習問題的模型結構

  • Linear layer: 線性層(一般用于輸出層、輸入層或中間層)
  • Long Short-Term Memory(LSTM): 長短時網絡,一種RNN網絡(一般用于輸入層或中間層)
  • CNN: 卷積神經網絡(一般用于輸入層或中間層)
  • The last layer: 輸出層
    • Linear layer: for regression problem
      對于回歸問題,一般采用線性層。
    • Sigmoid activation function: for binary classification problem
      對于二分類問題,一般采用Sigmoid激活函數。
    • Softmax layer: for multi-class classification problem
      對于多分類問題,一般采用Softmax層。

舉例: 非線性網絡可以這樣理解: 首先是一些線性層(Linear layer),線性層后邊加上非線性層(如ReLU函數),然后ReLU的輸出又傳送到線性層當中,然后在線性層的后邊又加上非線性層(如ReLU函數),…… ,最后加入輸出層,輸出層要根據任務來決定。

五. Loss function(損失函數)

常用的損失函數:

  • L1 loss: Mostly used as a regularizer.(一般用于正則化或規格化)

  • MSE loss(均方差誤差): used as loss function for regression problems(一般用于回歸問題中): 1n∑(Y^?Y)2\frac{1}{n}\displaystyle \sum{(\hat{Y}-Y)^2}n1?(Y^?Y)2其中Y^\hat{Y}Y^為模型預測值,YYY 為真實值。

  • Cross-entropy loss: used for binary and multi-class classfication problems(一般用于二分類或者多分類問題)

    對于神經網絡模型來說,就是像搭積木一樣搭建一個網絡模型,再根據具體的任務指定一個損失函數,然后根據損失函數的值去更新模型的權重(wwwbbb),這樣就能找到一組最優(或者局部最優)的wwwbbb。在搭建神經網絡結構的時候,中間到底用幾個隱藏層,每一層當中用幾個神經元,這些問題就是模型的超參數。
    常用的超參數有Learing rate、層數、每層神經元數量等,超參數的設定沒有具體原則,就是根據自己數據集的特點或者分布多嘗試。

六. Optimizer(優化方法)

如何去更新模型的權重wwwbbb,向左或者向右,每次走多遠,怎么去走,這就是優化問題,這也是一種類型的超參數。
常用的優化方法:

  • SGD
  • Adagrad
  • Adam
  • RMSProp

一般來說認為Adam比較好用,但是有些問題使用最原始的SGD效果反而更好,需要具體問題具體分析。

七. 訓練(學習)過程(Training(learning)procedure)

  • Define the neural network that has some learnable parameters(or weights)
  • Iterate over a dataset of inputs
  • Process input though the network
  • Compute the loss(how far is the output from being correct)
  • Propagate gradients back into the network’s parameters
  • Update the weights of the network,typically using a simple update rule:weight=weight?learning_rate?gradientweight=weight-learning\_rate*gradientweight=weight?learning_rate?gradient
  • 定義一個神經網絡,里邊有一些可學習的參數(wwwbbb)。可學習的意思就是不需要人為的計算,只需要機器去學習自動幫我們找到最優(或者局部最優)的參數;
  • 將數據集作為輸入,反復地進行迭代;
  • 通過模型進行輸入;
  • 計算損失值Loss(預測值與真實值之間的誤差到底有多大);
  • 將梯度傳播回模型的參數中(梯度下降法),即根據Loss值去反向的更新模型的權重wwwbbb;
  • 一般情況下,使用如下規則去更新wwwbbb: weight=weight?learning_rate?gradientweight=weight-learning\_rate*gradientweight=weight?learning_rate?gradient

八. MNIST-PyTorch實現

在輸入層前邊是沒有權重的,即就是原始的輸入數據,在輸入層和隱藏層之間有權重,在隱藏層和輸出層之間有權重,所以對于這個模型,我們需要定義兩個層次,而且是兩個線性層。
注:

  • 在__init__函數中定義模型中的“層”。其中fc1為隱藏層,fc2為輸出層。對于fc1層來說,輸入就是輸入層直接送入模型的數據,即28*28=784維的向量,共有512個神經元; 對于fc2層來說,輸入就是前一個層的神經元個數,即512維向量,因為是手寫數字識別,共有數字0~9,使用one-hot向量表示lable,所以,輸出的神經元有10個。(例如: 0123456789,如果只有“0”上有輸出,其它沒有,那么輸出就是“1000000000”,同理,如果只有“1”上有輸出,那么就是“0100000000”)。 在輸入層的神經元后有一個SoftMax函數,目的是將神經元的輸出概率范圍壓縮在(0, 1)之間,且所有概率值加起來的和等于1。看概率哪個最大,那么就屬于哪一類。(例如,在手寫數字識別中,“0”的概率比其他數字都大,那么認為手寫數字屬于“0”這一類,所以,輸出就是“1000000000”)。然后再和樣本的真實值作對比得到損失值(例如,這個樣本的標簽就是“1000000000”,那么這個樣本的損失值Loss=0)。
  • bias默認為True。
  • 一個神經層網絡的手寫數字識別,其識別正確率就能達到80%~90%,這就是神經網絡結構的厲害之處。
  • 如果出現“NameError: name ‘nn’ is not defined”,那么需要添加“import torch.nn as nn”。

(1) 代碼

代碼如下:

import torch from torch.nn import Linear import torch.nn as nn import torch.nn.functional as F from torch.nn import ReLUclass Net(nn.Module):def __init__(self):super(Net, self).__init__()self.fc1 = nn.Linear(28 * 28, 512)self.fc2 = nn.Linear(512, 10)def forward(self, x):x = F.relu(self.fc1(x))x = F.softmax(self.fc2(x), dim=1)return xnet = Net() print(net)input = torch.randn(1, 28*28)out = net(input) print(input) print(out)

結果如下:

其中結果圖中上面的tensor為輸入,下面的tensor為輸出。
注: 在定義forword函數時,如果不加上SoftMax函數,那么輸出結果就會有正數也有負數,加上SoftMax函數后,輸出結果全部在(0, 1)之間。

(2) 改變batch并輸出input.size

將input = torch.randn(1, 28*28)
改為input = torch.randn(2, 28*28)并輸出input的size
輸出結果如下:

可以看到輸入數據的size為(2, 784),其中“2”表示batch,即每一批(batch)將2個樣本送進模型; “784”表示每個樣本的維度。

(3) 改變batch并輸出out.size

將代碼改為:

input = torch.randn(200, 28*28)out = net(input) print(input.size()) print(out.size()) print(input) print(out)

輸出結果如下:

可以看到輸入數據的size為(200, 784),輸出數據的size為(200, 10)。

(4) 深度學習的本質思想

通過以上實驗可以看出: 深度學習的本質思想就是在做映射,輸入到輸出之間的映射關系。

九. 計算損失函數

注: “out”就是模型中的輸出,“target”就是模型中的“label”。

十. 更新權重

模型參數(以MNIST-PyTorch實現中的代碼為例):

print(net.parameters())

輸出結果如下:

要查看wwwbbb的具體值,需要添加一個迭代器。

十一. 手寫數字識別分類問題具體步驟(Training an handwritten digit classification)

  • Load and normalizing the MNIST training and test datasets using torchvision;
    使用torchvision加載并對MNIST數據集規格化;
  • Define a Convolution Neural Network
    定義卷積神經網絡;
  • Define a loss function
    定義損失函數;
  • Train the network on the training data
    利用數據經過反復迭代(多輪epoch),訓練網絡,得到一組最優的(或者局部最優的)網絡參數(wwwbbb);
  • Test the network on the test data
    得到網絡參數(wwwbbb)后,模型就有了,就可以利用測試集數據去測試網絡模型。

總結

以上是生活随笔為你收集整理的深度学习导论(4)神经网络基础的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美人与禽性xxxxx杂性 | 日韩插 | 中文字幕一区二区三区不卡 | 亚洲图片一区二区 | 日韩图片一区 | 亚洲国产精品无码观看久久 | 少妇2做爰交换朴银狐 | 免费看的黄色录像 | 欧美国产日韩在线视频 | 亚洲国产精品成人综合在线 | 日韩 欧美 中文 | 涩涩视频免费观看 | 国产女人18毛片水真多 | 美女av免费观看 | 国产精品69毛片高清亚洲 | 青春草在线视频免费观看 | 日本亚洲最大的色成网站www | 国产超碰精品 | 热播网| 72种无遮挡啪啪的姿势 | 华人av在线 | 日本久久精品 | 国产情侣免费视频 | 亚洲精品国产精品乱码不卡√香蕉 | 91网站免费入口 | 中国在线观看视频高清免费 | 成人理论影院 | 成人免费观看cn | 一级免费黄色片 | 永久免费在线观看av | 成人福利院 | 日本少妇裸体做爰高潮片 | 操你啦免费视频 | 久久不射网站 | 日韩欧美国产一区二区三区在线观看 | a视频在线免费观看 | 爽爽影院在线 | 久久综合激情网 | 欧美日韩精品在线播放 | 99热这里只有精品66 | 欧美日韩亚洲另类 | 捆绑无遮挡打光屁股 | 九七超碰在线 | 原神女裸体看个够无遮挡 | 久久精品国产大片免费观看 | 成人国产片| 欧美激情一区二区视频 | 久久国产精品波多野结衣av | 欧美黄色激情视频 | 国产69精品久久久久久久 | 国产一区二区播放 | 久久精品国产亚洲av成人 | 丰满熟妇人妻av无码区 | 久久在线免费观看视频 | 成人三级视频 | 一级小毛片 | 一区视频免费观看 | 超碰96在线 | 国产一区二区三区电影在线观看 | 亚洲一区二区三区在线观看视频 | 日本国产中文字幕 | 欧美成人一区二区视频 | 国产精品久久久免费视频 | 日韩一二在线 | 禁漫天堂下载18 | www.亚色 | 噜噜色网| 国产黑丝一区 | a级成人毛片 | 成人黄色片视频 | 国模视频一区二区 | 国产对白刺激视频 | 午夜精品在线播放 | 成人免费黄色网 | 国产5区 | 欧美我不卡 | 成年人免费网址 | 强伦轩人妻一区二区电影 | 欧美一卡二卡 | 日韩三级欧美 | 青草热视频 | 欧美三级a | 久久偷看各类wc女厕嘘嘘偷窃 | 日本精品少妇 | 亚洲精品在线视频免费观看 | 男女作爱免费网站 | 日本不卡视频一区二区 | 自拍偷拍亚洲图片 | 黑人巨大精品欧美黑白配亚洲 | 8x8ⅹ国产精品一区二区 | 国产一二三区免费视频 | 火影黄动漫免费网站 | 国产精品精品国产色婷婷 | 国产黄色片视频 | 天天射天天草 | 国产精品久久久久久亚洲av | 中国a级黄色片 | 色眯眯网| av色先锋|