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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【Pytorch神经网络基础理论篇】 08 Softmax 回归 + 损失函数 + 图片分类数据集

發布時間:2024/7/5 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Pytorch神经网络基础理论篇】 08 Softmax 回归 + 损失函数 + 图片分类数据集 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

3.4.?softmax回歸

回歸可以用于預測多少的問題。 比如預測房屋被售出價格,或者棒球隊可能獲得的勝場數,又或者患者住院的天數。

事實上,我們也對分類問題感興趣:不是問“多少”,而是問“哪一個”:

  • 某個電子郵件是否屬于垃圾郵件文件夾?

  • 某個用戶可能注冊或不注冊訂閱服務?

  • 某個圖像描繪的是驢、狗、貓、還是雞?

  • 某人接下來最有可能看哪部電影?

通常,機器學習實踐者用分類這個詞來描述兩個有微妙差別的問題:
1. 我們只對樣本的“硬性”類別感興趣,即屬于哪個類別;
2. 我們希望得到“軟性”類別,即得到屬于每個類別的概率。 這兩者的界限往往很模糊。其中的一個原因是:即使我們只關心硬類別,我們仍然使用軟類別的模型。

3.4.1.?分類問題

我們從一個圖像分類問題開始。 假設每次輸入是一個2×2的灰度圖像。 我們可以用一個標量表示每個像素值,每個圖像對應四個特征x1,x2,x3,x4。 此外,假設每個圖像屬于類別“貓”,“雞”和“狗”中的一個。

接下來,我們要選擇如何表示標簽。 我們有兩個明顯的選擇:最直接的想法是選擇y∈{1,2,3}, 其中整數分別代表{狗,貓,雞}。 這是在計算機上存儲此類信息的有效方法。 如果類別間有一些自然順序, 比如說我們試圖預測{嬰兒,兒童,青少年,青年人,中年人,老年人}, 那么將這個問題轉變為回歸問題,并且保留這種格式是有意義的。

幸運的是,一般的分類問題并不與類別之間的自然順序有關。 統計學家很早以前就發明了一種表示分類數據的簡單方法:獨熱編碼(one-hot encoding)。 獨熱編碼是一個向量,它的分量和類別一樣多。類別對應的分量設置為1,其他所有分量設置為0。
在我們的例子中,標簽y將是一個三維向量, 其中(1,0,0)對應于“貓”、(0,1,0)對應于“雞”、(0,0,1)對應于“狗”:

3.4.2.?網絡架構

為了估計所有可能類別的條件概率,我們需要一個有多個輸出的模型,每個類別對應一個輸出。 為了解決線性模型的分類問題,我們需要和輸出一樣多的仿射函數(affine function)。 每個輸出對應于它自己的仿射函數。 在我們的例子中,由于我們有4個特征和3個可能的輸出類別, 我們將需要12個標量來表示權重(帶下標的w), 3個標量來表示偏置(帶下標的b)。 下面我們為每個輸入計算三個未規范化的預測(logit):o1、o2和o3

我們可以用神經網絡圖下來描述這個計算過程。 與線性回歸一樣,softmax回歸也是一個單層神經網絡。 由于計算每個輸出o1、o2和o3取決于 所有輸入x1、x2、x3和x4, 所以softmax回歸的輸出層也是全連接層。

為了更簡潔地表達模型,我們仍然使用線性代數符號。 通過向量形式表達為o=Wx+b, 這是一種更適合數學和編寫代碼的形式。 由此,我們已經將所有權重放到一個3×4矩陣中。 對于給定數據樣本的特征x, 我們的輸出是由權重與輸入特征進行矩陣-向量乘法再加上偏置b得到的。

3.4.3.?全連接層的參數開銷

正如我們將在后續章節中看到的,在深度學習中,全連接層無處不在。全連接層是“完全”連接的,可能有很多可學習的參數。 具體來說,對于任何具有d個輸入和q個輸出的全連接層, 參數開銷為O(dq),這個數字在實踐中可能高得令人望而卻步。 幸運的是,將d個輸入轉換為q個輸出的成本可以減少到O(dqn), 其中超參數n可以由我們靈活指定,以在實際應用中平衡參數節約和模型有效性。

3.4.4.?softmax運算

現在我們將優化參數以最大化觀測數據的概率。 為了得到預測結果,我們將設置一個閾值,如選擇具有最大概率的標簽。

要將輸出視為概率,我們必須保證在任何數據上的輸出都是非負的且總和為1。 此外,我們需要一個訓練目標,來鼓勵模型精準地估計概率。 在分類器輸出0.5的所有樣本中,我們希望這些樣本有一半實際上屬于預測的類。 這個屬性叫做校準(calibration)。

社會科學家鄧肯·盧斯于1959年在選擇模型(choice model)的理論基礎上發明的softmax函數正是這樣做的: softmax函數將未規范化的預測變換為非負并且總和為1,同時要求模型保持可導。 我們首先對每個未規范化的預測求冪,這樣可以確保輸出非負。 為了確保最終輸出的總和為1,我們再對每個求冪后的結果除以它們的總和。如下式:

這里,對于所有的jj總有0≤y^j≤1。 因此,y^可以視為一個正確的概率分布。 softmax運算不會改變未規范化的預測o之間的順序,只會確定分配給每個類別的概率。 因此,在預測過程中,我們仍然可以用下式來選擇最有可能的類別。

盡管softmax是一個非線性函數,但softmax回歸的輸出仍然由輸入特征的仿射變換決定。 因此,softmax回歸是一個線性模型(linear model)。

3.4.5.?小批量樣本的矢量化

3.4.6.?損失函數

我們將使用最大似然估計來度量預測的效果。

3.4.6.1.?對數似然

由于y是一個長度為q的獨熱編碼向量, 所以除了一個項以外的所有項j都消失了。 由于所有y^j都是預測的概率,所以它們的對數永遠不會大于0。 因此,如果正確地預測實際標簽,即如果實際標簽P(y∣x)=1, 則損失函數不能進一步最小化。 注意,這往往是不可能的。 例如,數據集中可能存在標簽噪聲(比如某些樣本可能被誤標), 或輸入特征沒有足夠的信息來完美地對每一個樣本分類。

3.4.6.2.?softmax及其導數

3.4.6.3.?交叉熵損失

我們觀察到的不僅僅是一個結果,而是整個結果分布。 對于標簽y,我們可以使用與以前相同的表示形式。 唯一的區別是,我們現在用一個概率向量表示,如(0.1,0.2,0.7), 而不是僅包含二元項的向量(0,0,1)。 我們使用?(3.4.8)來定義損失l, 它是所有標簽分布的預期損失值。 此損失稱為交叉熵損失(cross-entropy loss),它是分類問題最常用的損失之一。 本節我們將通過介紹信息論基礎來理解交叉熵損失。?

?

3.4.7.?信息論基礎

信息論(information theory)涉及編碼、解碼、發送以及盡可能簡潔地處理信息或數據。

3.4.7.1.?熵

信息論的核心思想是量化數據中的信息內容,該數值被稱為分布P的熵(entropy)。可以通過以下方程得到:

3.4.7.2.?驚異

壓縮與預測有什么關系呢?舉一個極端的例子,假如數據流中的每個數據完全相同,這會是一個非常無聊的數據流。 由于它們總是相同的,所以很容易被預測。 所以,為了傳遞數據流的內容,我們不必傳輸任何信息。 因此,當數據易于預測,也就易于壓縮。

但是,如果我們不能完全預測每一個事件,那么我們有時可能會感到“驚異”。 在觀察一個事件j,并賦予它(主觀)概率P(j)。 當我們賦予一個事件較低的概率時,我們的驚異會更大。 在?(3.4.11)中定義的熵, 是當分配的概率真正匹配數據生成過程時的預期驚異。

3.4.7.3.?重新審視交叉熵

交叉熵想象為“主觀概率為Q的觀察者在看到根據概率P生成的數據時的預期驚異”。 當P=Q時,交叉熵達到最低。 在這種情況下,從P到Q的交叉熵是H(P,P)=H(P)。

簡而言之,我們可以從兩方面來考慮交叉熵分類目標:
(i)最大化觀測數據的似然;
(ii)最小化傳達標簽所需的驚異。

3.4.8.?模型預測和評估

在訓練softmax回歸模型后,給出任何樣本特征,我們可以預測每個輸出類別的概率。 通常我們使用預測概率最高的類別作為輸出類別。 如果預測與實際類別(標簽)一致,則預測是正確的。 在接下來的實驗中,我們將使用精度(accuracy)來評估模型的性能。 精度等于正確預測數與預測總數之間的比率。

3.5.?圖像分類數據集

import torch import torchvision from torch.utils import data from torchvision import transforms from d2l import torch as d2l import os os.environ['KMP_DUPLICATE_LIB_OK'] = 'True' # 可能是由于是MacOS系統的原因def get_dataloader_workers():"""使用4個進程來讀取數據"""return 4def load_data_fashion_mnist(batch_size, resize=None):"""下載Fashion-MNIST數據集,然后將其加載到內存中"""# 通過ToTensor實例將圖像數據從PIL類型變換成32位浮點數格式# 并除以255使得所有像素的數值均在0到1之間trans = [transforms.ToTensor()]if resize:trans.insert(0, transforms.Resize(resize))trans = transforms.Compose(trans)mnist_train = torchvision.datasets.FashionMNIST(root="../data", train=True, transform=trans, download=True)mnist_test = torchvision.datasets.FashionMNIST(root="../data", train=False, transform=trans, download=True)return (data.DataLoader(mnist_train, batch_size, shuffle=True,num_workers=get_dataloader_workers()),data.DataLoader(mnist_test, batch_size, shuffle=False,num_workers=get_dataloader_workers()))def get_fashion_mnist_labels(labels):"""返回Fashion-MNIST數據集的文本標簽"""text_labels = ['t-shirt', 'trouser', 'pullover', 'dress', 'coat','sandal', 'shirt', 'sneaker', 'bag', 'ankle boot']return [text_labels[int(i)] for i in labels]def show_images(imgs, num_rows, num_cols, titles=None, scale=1.5): #@save"""繪制圖像列表"""figsize = (num_cols * scale, num_rows * scale)_, axes = d2l.plt.subplots(num_rows, num_cols, figsize=figsize)axes = axes.flatten()for i, (ax, img) in enumerate(zip(axes, imgs)):if torch.is_tensor(img):# 圖片張量ax.imshow(img.numpy())else:# PIL圖片ax.imshow(img)ax.axes.get_xaxis().set_visible(False)ax.axes.get_yaxis().set_visible(False)if titles:ax.set_title(titles[i])return axes


3.6.?softmax回歸的從零開始實現

3.4.9.?小結?

  • softmax運算獲取一個向量并將其映射為概率。

  • softmax回歸適用于分類問題,它使用了softmax運算中輸出類別的概率分布。

  • 交叉熵是一個衡量兩個概率分布之間差異的很好的度量,它測量給定模型編碼數據所需的比特數。





一、Softmax 回歸

1.1視頻截圖

?

?

?

?

?

?

?

?

?

?二、損失函數

?

?

?

?三、圖像分類數據集

?

?

?

?

?

?四、從0開始實現sofymax回歸

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?五、softmax回歸的簡潔實現

?

?

?

?QA:

?1.softmax 和 logistic類似

?2.相對熵:是一個對稱的關系

3.損失圖中:橙色線 表示梯度的絕對值

4.最小化損失就等于最大化似然函數

總結

以上是生活随笔為你收集整理的【Pytorch神经网络基础理论篇】 08 Softmax 回归 + 损失函数 + 图片分类数据集的全部內容,希望文章能夠幫你解決所遇到的問題。

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