動手學深度學習學習筆記(8)

2021-10-08 22:26:34 字數 4162 閱讀 3760

影象分類資料集 fashion mnist

使用torchversion包

1.torchversion.datasets:一些載入數的函式及常用的資料集介面

2.torchversion.models:包含常用的模型結構(含預訓練模型),例如alexnet,vgg,resnet等。

3.torchversion.transforms:常用的變換,例如裁剪,旋轉等。

4.torchvision.utils:其他有用的方法

獲取資料集

匯入需要的包和模組

import torch

import torchvision

import torchvision.transforms as transforms

import matplotlib.pyplot as plt

import time

import sys

"..."

)#匯入上層目錄的d2lzh_pytorch

import d2lzh_pytorch as d2l

通過torchversion的torchvision.dataset來資料集。

第一次呼叫會從網上自動獲取資料。

通過引數train來指定獲取訓練資料還是測試資料集。

測試資料集也叫測試集,只用來評估模型,並不用來訓練模型。

指定引數transform = transforms.totensor() 使所有資料轉化為tensor,如果不進行轉換則會返回pil。

transforms.totensor()將尺寸為h×w×c且位於[0,255]的pil或者資料型別為np.unit8的numpy陣列轉換為尺寸為c×h×w且資料型別為torch.float32且位於[0.0,1.0]的tensor

重點:由於畫素值為0到255的整數,所以剛好是unit8所能表示的範圍。包括transforms.totensor在內的一些關於的函式預設輸入的是unit8型。

若不是可能報錯或者結果出現問題。

如果用畫素值為0到255來表示資料,那麼一律將其型別設定為unit8。

mnist_train = torchvision.datasets.fashionmnist(root =

'~/datasets/fashionmnist'

,train =

true

,download =

true

,transform = transforms.totensor())

mnist_test = torchvision.datasets.fashionmnist(root =

'~/datasets/fashionmnist'

,train =

false

,download =

true

,transform = transforms.totensor(

))

mnist_train,mnist_test都是torch.utils.data.dataset的子類。

所以可以用len()來獲取該資料集的大小,還可以用下標獲取具體的樣本。

有十個類別,訓練集和測試集的樣本數分別為60000和10000。

print

(type

(mnist_train)

)print

(len

(mnist_train)

,len

(mnist_test)

)

輸出

<

class

'torchvision.datasets.mnist.fashionmnist'

>

60000

10000

也可以通過下標來訪問樣本

feature,label = mnist_train[0]

print

(feature.shape, label)

輸出:

torch.size([1

,28,28

])9

是寬高都是28畫素的影象,由於使用了transforms.totensor(),所有每個畫素都是[0.0,1.0]的32位浮點數。

重點,feature的尺寸通道在前,由於是灰度影象,所以通道數為1.

fashion_mnist中一共有十個類別。

以下函式可以將相應的數值轉化為相應的文字標籤。

def

get_fashion_mnist_labels

(labels)

: 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_fashion_mnist

(images,labels)

: use_svg_display(

) _,figs = plt.subplots(1,

len(images)

,figsize =(12

,12))

#此處忽略了不使用的變數

for f, img, lbl in

zip(figs,images,labels)

: f.imshow(img.view((28

,28))

.numpy())

f.set_title(lbl)

f.axes.get_xaxis(

).set_visible(

false

) f.axes.get_yaxis(

).set_visible(

false

) plt.show(

)

讀取前十個訓練資料集中的樣本影象和文字標籤。

x, y =

,[]for i in

range(10

);[0

])[1

])show_fashion_mnist(x, get_fashion_mnist_labels(y)

)

讀取小批量

將mnist_mnist傳入torch.utils.data.dataloader來建立小批量讀取資料樣本。

dataloader允許多程序來加速資料讀取。

可以通過num_workers這個引數來設定程序個數

batch_size =

256if sys.platform.startswith(

'win'):

num_workers =

0#表示不需要額外的程序來加速讀取資料

else

: num_workers =

4train_iter = torch.utils.data.dataloader(mnist_train, batch_size = batch_size, shuffle =

true

, num_workers = num_workers)

test_iter = torch.utils.data.dataloader(mnist_test, batch_size = batch_size, shuffle =

false

, num_workers = num_workers)

檢視讀取一遍訓練資料集需要的時間。

start = time.time(

)for x,y in train_iter:

cotinue

print

('%.2f sec'

%(time.time(

)- start)

)

輸出

2.34 sec

筆記 動手學深度學習

在求數值解的優化演算法中,小批量隨機梯度下降 mini batch stochastic gradient descent 在深度學習中被廣泛使用。它的演算法很簡單 先選取一組模型引數的初始值,如隨機選取 接下來對引數進行多次迭代,使每次迭代都可能降低損失函式的值。在每次迭代中,先隨機均勻取樣乙個由...

動手深度學習 筆記 8

機器翻譯 mt 將一段文字從一種語言自動翻譯為另一種語言,用神經網路解決這個問題通常稱為神經機器翻譯 nmt 主要特徵 輸出是單詞序列而不是單個單詞。輸出序列的長度可能與源序列的長度不同。將資料集清洗 轉化為神經網路的輸入minbatch。資料預處理的過程中,我們首先需要對資料進行清洗。字串 單詞組...

深度學習 動手學深度學習筆記 12

g是乙個生成的網路,它接收乙個隨機的雜訊z,通過這個雜訊生成,記做g z d是乙個判別網路,判別一張是不是 真實的 它的輸入引數是x,x代表一張,輸出d x 代表x為真實的概率,如果為1,就代表100 是真實的,而輸出為0,就代表不可能是真實的。在訓練過程中,生成網路g的目標就是盡量生成真實的去欺騙...