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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人工智能 > pytorch >内容正文

pytorch

09 Softmax 回归 + 损失函数 + 图片分类数据集【动手学深度学习v2】

發(fā)布時間:2024/4/13 pytorch 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 09 Softmax 回归 + 损失函数 + 图片分类数据集【动手学深度学习v2】 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

分類問題









分類問題只關(guān)心對正確類的預(yù)測

梯度下降理解

https://zhuanlan.zhihu.com/p/335191534(強推)

圖像分類數(shù)據(jù)集

import matplotlib.pyplot as plt import torch import torchvision from torch.utils import data from torchvision import transforms from d2l import torch as d2ld2l.use_svg_display()# 使用框架內(nèi)的內(nèi)置函數(shù)將fashion-minist數(shù)據(jù)集下載并讀取到內(nèi)存 # 通過totensor實例將圖像數(shù)據(jù)從PIL類型變成32位浮點 的tensor類型 # 并除255使得所得的像素數(shù)值在0-1之間trans = transforms.ToTensor() train = torchvision.datasets.FashionMNIST(root='./data', train=True, transform=trans, download=True) test = torchvision.datasets.FashionMNIST(root='./data', train=False, transform=trans, download=True)print(len(train)) print(len(test))# 通過下標(biāo)訪問任意一個樣本,返回值為兩個torch,一個特征tensor和 一個標(biāo)簽tensor print(train[100]) print(train[0][0], train[0][1],train[0][0].shape)# labels是一個列表 # 數(shù)值標(biāo)簽轉(zhuǎn)文本標(biāo)簽 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):d2l.use_svg_display()# 繪制矢量圖_, figs = plt.subplots(2, len(images), figsize=(12, 12))# 創(chuàng)建子圖,一行l(wèi)en(images)列,圖片大小12*12for f, img, lbl in zip(figs, images, labels):# zip函數(shù)將他們壓縮成由多個元組組成的列表f.imshow(img.view((28, 28)).numpy())# 將img轉(zhuǎn)形為28*28大小的張量,然后轉(zhuǎn)換成numpy數(shù)組f.set_title(lbl)# 設(shè)置每個子圖的標(biāo)題為標(biāo)簽# 不顯示坐標(biāo)刻度f.axes.get_xaxis().set_visible(False)f.axes.get_yaxis().set_visible(False)# 關(guān)閉x軸y軸plt.show()# next拿到第一個小批量 X, y = next(iter(data.DataLoader(train, batch_size=18))) show_fashion_mnist(X, get_fashion_mnist_labels(y))


在模型中讀取小批量
有了線性回歸中讀取小批量的經(jīng)驗,我們知道讀取小批量可以使用torch中內(nèi)置的dataloader函數(shù)來實現(xiàn)。

dataloader還支持多線程讀取數(shù)據(jù),通過設(shè)置它的num_workers參數(shù)。

import matplotlib.pyplot as plt import torch import torchvision from torch.utils import data from torchvision import transforms from d2l import torch as d2ld2l.use_svg_display()# 使用框架內(nèi)的內(nèi)置函數(shù)將fashion-minist數(shù)據(jù)集下載并讀取到內(nèi)存 # 通過totensor實例將圖像數(shù)據(jù)從PIL類型變成32位浮點 的tensor類型 # 并除255使得所得的像素數(shù)值在0-1之間trans = transforms.ToTensor() train = torchvision.datasets.FashionMNIST(root='./data', train=True, transform=trans, download=True) test = torchvision.datasets.FashionMNIST(root='./data', train=False, transform=trans, download=True)print(len(train)) print(len(test))# 通過下標(biāo)訪問任意一個樣本,返回值為兩個torch,一個特征tensor和 一個標(biāo)簽tensor print(train[100]) print(train[0][0], train[0][1],train[0][0].shape)# labels是一個列表 # 數(shù)值標(biāo)簽轉(zhuǎn)文本標(biāo)簽 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):d2l.use_svg_display()# 繪制矢量圖_, figs = plt.subplots(1, len(images), figsize=(12, 12))# 創(chuàng)建子圖,一行l(wèi)en(images)列,圖片大小12*12for f, img, lbl in zip(figs, images, labels):# zip函數(shù)將他們壓縮成由多個元組組成的列表f.imshow(img.view((28, 28)).numpy())# 將img轉(zhuǎn)形為28*28大小的張量,然后轉(zhuǎn)換成numpy數(shù)組f.set_title(lbl)# 設(shè)置每個子圖的標(biāo)題為標(biāo)簽f.axes.get_xaxis().set_visible(False)f.axes.get_yaxis().set_visible(False)# 關(guān)閉x軸y軸plt.show()# next拿到第一個小批量 X, y = next(iter(data.DataLoader(train, batch_size=18))) show_fashion_mnist(X, get_fashion_mnist_labels(y))batch_size = 256 # 小批量數(shù)目 # num_workers=4,不開啟多線程讀取。train_iter = data.DataLoader(train, batch_size=batch_size, shuffle=True, num_workers=8)# test_iter = data.DataLoader(test, batch_size=batch_size, shuffle=False, num_workers=4) timer = d2l.Timer() for X,y in train_iter:continue print(f'{timer.stop():.2f} sec') # 數(shù)據(jù)的讀取需要比訓(xùn)練快 ''' num_workers=4 2.97 secnum_workers=8 2.02 sec '''

softmax回歸的從0實現(xiàn)

import matplotlib.pyplot as plt import torch import torchvision from torch.utils import data from torchvision import transforms from d2l import torch as d2l from IPython import displaybatch_size = 256 # 訓(xùn)練集和測試集的迭代器 train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size) num_inputs = 784 num_outputs = 10# 對于softmax 輸入是個向量 所以把3d的圖像壓縮成一行784列的向量 # 將展平每個圖像,將它們視為長度為784的向量。因為我們的數(shù)據(jù)集有10個類別.所以網(wǎng)絡(luò)輸出維度為10 W = torch.normal(0, 0.01, size=(num_inputs, num_outputs), requires_grad=True) b = torch.zeros(num_outputs, requires_grad=True)# 實現(xiàn)sotfmax 對矩陣的每行做softmax def softmax(X):X_exp = torch.exp(X)partition = X_exp.sum(1, keepdim=True)# 沿著列變化求和 就是每一行求和# soft(X)ij =exp(Xij)/sumk(exp(Xik))return X_exp / partition# 廣播機制X = torch.normal(0, 1, (2, 5)) # 均值0 方差1 2*5 X_prob = softmax(X) # 沿列變化相加 print(X_prob, X_prob.sum(1)) '''tensor([[0.3529, 0.1850, 0.1426, 0.0871, 0.2324],[0.1502, 0.0493, 0.0970, 0.4357, 0.2677]]) tensor([1., 1.])'''# 實現(xiàn)softmax回歸模型 def net(X):# X變列向量 -1表示自動算 其實是batchsize*784的矩陣return softmax(torch.matmul(X.reshape((-1, W.shape[0])), W) + b)# 創(chuàng)建一個數(shù)據(jù)y_hat,其中包含2個樣本在3個類別的預(yù)測概率,使用y作為y_hat中概率的索引y = torch.tensor([0, 2]) y_hat = torch.tensor([[0.1, 0.3, 0.6], [0.3, 0.2, 0.5]]) # 等價y_hat[[0, 1], [0, 2]] 看[0,0][1,2]的值 就是 預(yù)測第0個樣本是第0類的概率 預(yù)測第1個樣本是第2類的概率 # 看真實標(biāo)號 類的預(yù)測值是多少 print(y_hat[[0, 1], y])# 實現(xiàn)交叉熵損失函數(shù) def cross_entropy(y_hat, y):return -torch.log(y_hat[range(len(y_hat)), y])

總結(jié)

以上是生活随笔為你收集整理的09 Softmax 回归 + 损失函数 + 图片分类数据集【动手学深度学习v2】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。