《動手學深度學習》第四天之softmax回歸

2021-09-25 10:23:34 字數 3697 閱讀 8813

首先學習第三章第五節–影象分類資料集

主要解釋一下對於函式的定義

(一)定義 get_fashion_mnist_labels(labels) 函式來將數值標籤轉成相應的文字標籤:

將用的到的衣服類別定義在乙個陣列裡面,通過將陣列下表和陣列內容對應進行轉換。

(二)定義 show_fashion_mnist(images, labels) 函式在一行裡畫出多張影象和對應標籤的函式:

①首先呼叫函式 d2l.use_svg_display() 用向量圖顯示,

②然後呼叫函式 d2l.plt.subplots()

函式原型是

def subplots(nrows=1, ncols=1, sharex=false, sharey=false, squeeze=true,

subplot_kw=none, gridspec_kw=none, **fig_kw):

fig = figure(**fig_kw)

axs = fig.subplots(nrows=nrows, ncols=ncols, sharex=sharex, sharey=sharey,

squeeze=squeeze, subplot_kw=subplot_kw,

gridspec_kw=gridspec_kw)

return fig, axs

那麼在此應用時,便是把子圖的行數設為1,列數設為的個數,並且通過將引數**fig_kw設為figsize = (12,12)使得設為長寬均為12的尺寸。

③zip相當於壓縮,zip(*)相當於解壓。

例如,對於

x=[「a」,「1」]

y=[「b」,「2」]

z = list(zip(x,y))

print (list(zip(x,y)))

print (list(zip(*z)))

結果為:

[(『a』, 『b』), (『1』, 『2』)]

[(『a』, 『1』), (『b』, 『2』)]

④通過for迴圈,將所有的影象的名字和相應的顯示出來,同時將的大小變為(28,28)。

(三)讀取小批量

①mxnet.gluon.data.vision.transforms.totensor():

將影象陣列轉換為張量陣列。將[0,255]範圍內的形狀(長×寬×寬)的影象陣列轉換為[0,1範圍內的浮動32張量形狀(長×寬×寬)陣列。

將影象資料從uint8格式變換成32位浮點數格式,並除以255使得所有畫素的數值均在0到1之間。totensor例項還將影象通道從最後一維移到最前一維來方便之後介紹的卷積神經網路計算。

②sys.platform該變數返回當前系統的平台標識

當系統是win時,不支援多程序來加速資料讀取,所以num_workers=0

mxnet.gluon.data.dataloader(dataset, batch_size=none, shuffle=false, sampler=none, last_batch=none, batch_sampler=none, batchify_fn=none, num_workers=0, pin_memory=false, pin_device_id=0, prefetch=none, thread_pool=false)

transform_first(fn)

返回乙個新資料集,每個樣本的第乙個元素由transformer函式fn轉換

所以在這個例項中,就是將第乙個元素用to tensor轉換了。

訓練資料要打亂順序,測試資料不需要打亂順序。

接著學習第三章第六節–softmax回歸

(一)實現softmax運算:

定義softmax運算,得到的矩陣每行元素和為1且非負。因此,該矩陣每行都是合法的概率分布。softmax運算的輸出矩陣中的任意一行元素代表了乙個樣本在各個輸出類別上的**概率。

(二)定義模型:

首先通過x.reshape((-1, num_inputs),將x變成列數為 num_inputs的向量,然後通過nd.dot()實現w和x的向量相乘,然後與b相加,再通過softmax回歸運算,實現變成概率。

根據沿給定軸的輸入索引從輸入陣列中選取元素。給定形狀(d0,d1)的輸入陣列和形狀(i0)的索引,結果將是形狀(i0)的輸出陣列,其中:輸出[i] =輸入[i,索引[i]]

定義cross_entropy(y_hat, y)為交叉熵函式

(四)計算分類準確率:

定義準確率accuracy()函式:分類準確率即正確**數量與總**數量之比。

定義evaluate_accuracy(data_iter, net)可以評價模型net在資料集data_iter上的準確率。

(五)訓練模型:

梳理一下使用小批量隨機梯度下降來優化模型的損失函式

def train_ch3(net, train_iter, test_iter, loss, num_epochs, batch_size,

params=none, lr=none, trainer=none)

在乙個週期之內,

①首先初始化引數train_l_sum, train_acc_sum, n

②利用softmax回歸模型net()**輸出y_hat,並且計算損失函式loss(),然後將元素求和sum()

③利用backward()對標量l求梯度,然後利用sgd()更新引數

④利用 train_l_sum對損失l,train_acc_sum對正確**數量,n對總數量來迭代求和,test_acc直接是利用evaluate_accuracy(data_iter, net)求評價模型net在資料集data_iter上的準確率。

⑤週期完成,求均值。

最後學習第三章第七節–softmax回歸的簡潔實現

按照線性回歸的簡潔實現中的介紹:

①先定義乙個模型變數net,它是乙個sequential例項。在gluon中,sequential例項可以看作是乙個串聯各個層的容器。在構造模型時,我們在該容器中依次新增層。當給定輸入資料時,容器中的每一層將依次計算並將輸出作為下一層的輸入。

②在gluon中,全連線層是乙個dense例項。我們定義該層輸出個數為10。

③在使用net前,我們需要初始化模型引數,如線性回歸模型中的權重和偏差。我們從mxnet匯入init模組。該模組提供了模型引數初始化的各種方法。這裡的init是initializer的縮寫形式。我們通過init.normal(sigma=0.01)指定權重引數每個元素將在初始化時隨機取樣於均值為0、標準差為0.01的正態分佈。偏差引數缺省會初始化為零。

④利用softmaxcrossentropyloss()計算包括softmax運算和交叉熵損失。由於預設 sparse_label is true,所以計算

最後訓練模型。

Tensorflow深度學習 第四天

前向傳播的最後一步就是完成誤差的計算 l g f x y 從另乙個角度來理解神經網路,它完成的是特徵的維度變換的功能,比如 4 層的 mnist 手寫數字識別的全連線網路,它依次完成了784 256 128 64 10的特 徵降維過程。原始的特徵通常具有較高的維度,包含了很多底層特徵及無用資訊,通過...

第四天學習

一 權重關係 樣式表的權重關係 內聯樣式表的權重最大!內部和外部樣式的權重,和書寫的前後順序有關!放在後面的會把放在前面的樣式覆蓋掉 網頁的布局 先做上下排版 再做左右排版 從外往裡 二 css語法 選擇符選擇符 選擇符就是給標籤起名字 型別選擇符 標籤選擇符 所有的html標籤可以直接當做選擇符進...

學習vue之第四天

今天學習了 主要介紹兩種經常混淆的字串擷取方法 substring和substr 1 substring 作用 用於提取字串中介於兩個指定下標之間的字元 語法 substring start,end 語法解析 start開始和end結束的位置,從零開始的索引,包頭不包尾 1 substring驗證 ...