影象分類資料集 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的目標就是盡量生成真實的去欺騙...