【PyTorch基礎教程12】圖像多分類問題(學不會來打我?。?/h1>

      網友投稿 1275 2025-04-02

      學習總結

      (1)本次圖像多分類中的最后一層網絡不需要加激活,因為在最后的torch.nn.CrossEntropyLoss已經包括了激活函數softmax。這里注意softmax的dim參數問題,如下面這個是(3,2)的一個變量,dim = 0 實際上是對第一維的3個變量進行對數化,而dim = 1是對第二維進行操作。

      a = torch.Tensor([[1,1],[2,2],[3,3]]) a.size() Out[89]: torch.Size([3, 2]) b = torch.nn.Softmax(dim=0)(a) b Out[91]: tensor([[0.0900, 0.0900], [0.2447, 0.2447], [0.6652, 0.6652]]) b = torch.nn.Softmax(dim=1)(a) b Out[93]: tensor([[0.5000, 0.5000], [0.5000, 0.5000], [0.5000, 0.5000]])

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      (2)本次pytorch在讀圖像時,將PIL圖像(現在都用Pillow了)轉為Tensor,神經網絡一般希望input比較小,最好在-1到1之間,最好符合正態分布。三種主流圖像處理庫的比較:

      文章目錄

      學習總結

      一、多分類問題

      二、分布和API

      三、交叉熵代碼實踐

      四、代碼實踐

      Reference

      一、多分類問題

      注意驗證/測試的流程基本與訓練過程大體一致,不同點在于:

      需要預先設置torch.no_grad,以及將model調至eval模式

      不需要將優化器的梯度置零

      不需要將loss反向回傳到網絡

      不需要更新optimizer

      二、分布和API

      法一:把每一個類別的確定看作是一個二分類問題。利用交叉熵。

      為了解決抑制問題,就不要輸出每個類別的概率,且滿足每個概率大于0和概率之和為1的條件。(二分類我們輸出的是分布,求出一個然后用1減去即可,多分類雖然也可以這樣,但是最后1減去其他所有概率的計算,還需要構建計算圖有點麻煩)。

      之前二分類中的交叉熵的兩項中只能有一項為0.

      (1)NLLLoss函數計算如下紅色框:

      (2)可以直接使用torch.nn.CrossEntropyLoss(將下列紅框計算納入)。注意右側是由類別生成獨熱編碼向量。

      交叉熵,最后一層網絡不需要激活,因為在最后的Torch.nn.CrossEntropyLoss已經包括了激活函數softmax。

      (1)交叉熵手寫版本

      import numpy as np y = np.array([1, 0, 0]) z = np.array([0.2, 0.1, -0.1]) y_predict = np.exp(z) / np.exp(z).sum() loss = (- y * np.log(y_predict)).sum() print(loss) # 0.9729189131256584

      1

      2

      3

      4

      5

      6

      7

      (2)交叉熵pytorch栗子

      交叉熵損失和NLL損失的區別(讀文檔):

      https://pytorch.org/doc s/stable/nn.html#crossentropyloss

      https://pytorch.org/docs/stable/nn.html#nllloss

      搞懂為啥:CrossEntropyLoss <==> LogSoftmax + NLLLoss

      三、交叉熵代碼實踐

      前面是sigmoid,后面是softmax(使得概率大于0,概率值和為1)。 兩點注意。

      # -*- coding: utf-8 -*- """ Created on Mon Oct 18 22:48:55 2021 @author: 86493 """ # 用CrossEntropyLoss計算交叉熵 import torch # 注意1:設定的第0個分類 y = torch.LongTensor([0]) z = torch.Tensor([[0.2, 0.1, -0.1]]) # 注意2:CrossEntropyLoss criterion = torch.nn.CrossEntropyLoss() loss = criterion(z, y) print(loss.item()) # 0.9729189276695251 # 舉栗子:mini-batch:batch_size = 3 import torch criterion = torch.nn.CrossEntropyLoss() # 三個樣本 Y = torch.LongTensor([2, 0, 1]) # 第一個樣本比較吻合,loss會較小 Y_pred1 = torch.Tensor([[0.1, 0.2, 0.9], # 2 該層為原始的線性層的輸出 [1.1, 0.1, 0.2], # 0 [0.2, 2.1, 0.1]])# 1 # 第二個樣本差的比較遠,loss較大 Y_pred2 = torch.Tensor([[0.8, 0.2, 0.3], # 2 [0.2, 0.3, 0.5], # 0 [0.2, 0.2, 0.5]])# 1 l1 = criterion(Y_pred1, Y) l2 = criterion(Y_pred2, Y) print("Batch Loss1 = ", l1.data, "\nBatch Loss2 =", l2.data) # Batch Loss1 = tensor(0.4966) # Batch Loss2 = tensor(1.2389)

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      【PyTorch基礎教程12】圖像多分類問題(學不會來打我啊)

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      24

      25

      26

      27

      28

      29

      30

      31

      32

      33

      34

      35

      36

      37

      38

      39

      40

      41

      42

      43

      44

      45

      46

      47

      48

      49

      50

      51

      52

      53

      54

      55

      56

      57

      58

      59

      60

      61

      62

      63

      64

      65

      66

      67

      68

      69

      70

      71

      72

      73

      74

      75

      76

      77

      78

      79

      80

      81

      82

      83

      84

      85

      86

      87

      88

      89

      90

      91

      92

      93

      94

      95

      96

      97

      98

      99

      100

      101

      102

      103

      104

      105

      106

      107

      108

      109

      110

      111

      112

      113

      114

      115

      116

      117

      118

      119

      120

      121

      122

      123

      124

      125

      126

      127

      128

      129

      代碼打印的loss值:

      [1, 300] loss: 2.216 [1, 600] loss: 0.872 [1, 900] loss: 0.423 Accuracy on test set: 89 % [2, 300] loss: 0.333 [2, 600] loss: 0.272 [2, 900] loss: 0.232 Accuracy on test set: 93 % [3, 300] loss: 0.189 [3, 600] loss: 0.176 [3, 900] loss: 0.160 Accuracy on test set: 95 % [4, 300] loss: 0.135 [4, 600] loss: 0.127 [4, 900] loss: 0.121 Accuracy on test set: 95 % [5, 300] loss: 0.104 [5, 600] loss: 0.096 [5, 900] loss: 0.097 Accuracy on test set: 96 % [6, 300] loss: 0.080 [6, 600] loss: 0.071 [6, 900] loss: 0.083 Accuracy on test set: 97 % [7, 300] loss: 0.062 [7, 600] loss: 0.062 [7, 900] loss: 0.062 Accuracy on test set: 97 % [8, 300] loss: 0.050 [8, 600] loss: 0.052 [8, 900] loss: 0.053 Accuracy on test set: 97 % [9, 300] loss: 0.034 [9, 600] loss: 0.045 [9, 900] loss: 0.043 Accuracy on test set: 97 % [10, 300] loss: 0.032 [10, 600] loss: 0.032 [10, 900] loss: 0.036 Accuracy on test set: 97 %

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      24

      25

      26

      27

      28

      29

      30

      31

      32

      33

      34

      35

      36

      37

      38

      39

      40

      Reference

      (1)pytorch中with torch.no_grad()

      (2)https://www.bilibili.com/video/BV1Y7411d7Ys?p=9

      (3)pytorch學習(五)—圖像的加載/讀取方式

      (4)解決Python報錯:RuntimeError: Can’t call numpy() on Variable that requires grad. Use var.detach().numpy()

      pytorch 網絡

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:WPS表格2013將單元格的內容拆分為多個單獨的列(wps一列拆分多個單元格)
      下一篇:Excel2010中使用屏幕截圖功能輕松截取當前打開的程序窗口(excel里截屏)

      相關文章
      国产99在线|亚洲| 亚洲首页国产精品丝袜| 亚洲AV无码国产精品永久一区| 亚洲国产成+人+综合| 久久精品国产亚洲AV电影| 亚洲色图国产精品| 亚洲精品无码不卡| 精品亚洲麻豆1区2区3区| 中文字幕亚洲精品资源网| 亚洲蜜芽在线精品一区| 亚洲国产精品综合福利专区| 亚洲成a人片77777群色| 亚洲性色成人av天堂| 亚洲综合丁香婷婷六月香| 亚洲va成无码人在线观看| 亚洲首页国产精品丝袜| 亚洲熟妇无码AV不卡在线播放 | 亚洲精品午夜在线观看| 亚洲欧洲精品久久| 亚洲国产人成在线观看| 亚洲高清视频在线| 亚洲av无码一区二区三区人妖| 极品色天使在线婷婷天堂亚洲 | 亚洲国产精品13p| 国产亚洲老熟女视频| 亚洲精品国产精品乱码不卡√| 亚洲高清国产拍精品26U| 一区二区三区亚洲| 亚洲国产精品专区| 一区二区亚洲精品精华液 | 亚洲丶国产丶欧美一区二区三区| 豆国产96在线|亚洲| 亚洲天堂中文字幕在线| 亚洲精品午夜国产VA久久成人| 亚洲av日韩av高潮潮喷无码| 亚洲国产高清美女在线观看 | 久久亚洲伊人中字综合精品| 亚洲欧洲日产v特级毛片| 美女视频黄免费亚洲| 婷婷亚洲综合五月天小说在线| 亚洲色偷偷狠狠综合网|