最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

pyTorch深度學習softmax實現(xiàn)解析

 更新時間:2021年09月30日 11:24:32   作者:算法菜鳥飛高高  
這篇文章主要介紹了pytorch深度學習中對softmax實現(xiàn)進行了詳細解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步

用PyTorch實現(xiàn)linear模型

模擬數(shù)據(jù)集

num_inputs = 2 #feature number
num_examples = 1000 #訓練樣本個數(shù)
true_w = torch.tensor([[2],[-3.4]]) #真實的權(quán)重值
true_b = torch.tensor(4.2) #真實的bias
samples = torch.normal(0,1,(num_examples,num_inputs))
noise = torch.normal(0,0.01,(num_examples,1))
labels = samples.matmul(true_w) + true_b + noise

定義模型

class LinearNet(nn.Module):
	def __init__(self,in_features):
		super().__init__()
		self.fc = nn.Linear(in_features=2,out_features=1)
	def forward(self,t):
		t = self.fc(t)
		return t

加載數(shù)據(jù)集

import torch.utils.data as Data
dataset = Data.TensorDataset(samples,labels)#類似于zip,把兩個張量打包
data_loader = Data.DataLoader(dataset,batch_size=100,shuffle=True)

optimizer

network = LinearNet(2)
optimizer = optim.SGD(network.paramters(),lr=0.05)

模型訓練

for epoch in range(10):
    total_loss = 0
    for data,label in data_loader:
        predict = network(data)
        loss = F.mse_loss(predict,label)
        total_loss += loss.item()
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()
    print(
        'epoch',epoch,
        'loss',total_loss,
        'weight',network.weight,
        'bias',network.bias
    )

softmax回歸模型

sotfmax主要用于分類任務。regression最終得到的是一個scalar,根據(jù)input中的feature線性相加得到一個output。分類任務的結(jié)果是一個類別,是離散的。
假設(shè)現(xiàn)在有一批圖片是2 * 2大小的灰度圖片,這樣圖片中的每隔二像素用一個標量表示就行了。這批圖片一種是三類小動物,第一類是小狗,第二類是小貓,第三類是小兔子。
每張圖片總共4個像素點,我們可以看作是4個feature,假設(shè)這三類小動物的圖片線性可分,每一類對應一組weight和一個bias。

在這里插入圖片描述

可以根據(jù)輸出值較大的來決定哪一類,可這樣有個問題,首先輸出值沒有明確的意義,且可能是實數(shù)范圍。其次,不好衡量輸出值與真實值之間的差距。所以采用softmax操作,將三個輸出值轉(zhuǎn)化成概率值,這樣輸出結(jié)果滿足概率分布。label采用one-hot編碼,相當于對應類別的概率是1,這樣就可以用cross_entropy來計算loss。

Fashion-MNIST

本次學習softmax模型采用torchvision.datasets中的Fashion-MNIST。

import torchvision
import torchvision.transforms as transforms
train_set = torchvision.datasets.FashionMNIST(
	root='./data',
	train=True,
	download=True,
	transform=transforms.ToTensor()
)

transforms.ToTensor()將尺寸為(H x W x C)且數(shù)據(jù)位于(0,255)的PIL圖片或者數(shù)據(jù)類型為np.uint8的NumPy數(shù)組轉(zhuǎn)換為尺寸為C x H x W且數(shù)據(jù)類型為torch.float32且位于(0.0,1.0)的Tensor

len(train_set),len(test_set)
> (60000,10000)

展示一下數(shù)據(jù)集中的圖片

import matplotlib.pyplot as plt
plt.figure(figsize=(10,10))
for i,(image,lable) in enumerate(train_set,start=1):
	plt.subplot(1,10,i)
	plt.imshow(image.squeeze())
	plt.title(train_set.classes[lable])
	plt.axis('off')
	if i == 10:
		break
plt.show()

在這里插入圖片描述

train_loader = torch.utils.data.DataLoader(train_set,batch_size=100,shuffle=True,num_workers=4)
test_loader = torch.utils.data.DataLoader(test_set,batch_size=100,shuffle=False,num_workers=1)

cross_entropy

def net(samples,w,b):
	samples = samples.flatten(start_dim=1) #將c,h,w三個軸展成一個feature軸,長度為28 * 28
	samples = torch.exp(samples)#全體元素取以e為底的指數(shù)
	partial_sum = samples.sum(dim=1,keepdim=True) 
	samples = samples / partial_sum #歸一化,得概率,這里還應用了廣播機制
	return samples.matmul(w) + b	

在這里插入圖片描述

i表示label對應的種類,pi為真實種類的預測概率,log是以e為底的對數(shù)
這里gather函數(shù)的作用,就是在predict上取到對應label的概率值,注意負號不能丟,pytorch中的cross_entropy對輸入先進行一次softmax操作,以保證輸入都是正的。

模型的實現(xiàn)

def net(samples,w,b):
	samples = samples.flatten(start_dim=1) #將c,h,w三個軸展成一個feature軸,長度為28 * 28
	samples = torch.exp(samples)#全體元素取以e為底的指數(shù)
	partial_sum = samples.sum(dim=1,keepdim=True) 
	samples = samples / partial_sum #歸一化,得概率,這里還應用了廣播機制
	return samples.matmul(w) + b	

利用PyTorch簡易實現(xiàn)softmax

import torch
import torchvision
import torch.nn as nn
import torch.nn.functional as F
import torch.utils.data as Data
import torchvision.transforms as transforms
import torch.optim as optim
import torch.nn.init as init
class SoftmaxNet(nn.Module):
    def __init__(self,in_features,out_features):
        super().__init__()
        self.fc = nn.Linear(in_features=in_features,out_features=out_features)
    def forward(self,t):
        t = t.flatten(start_dim=1)
        t = self.fc(t)
        return t
train_set = torchvision.datasets.FashionMNIST(
    root='E:\project\python\jupyterbook\data',
    train=True,
    download=True,
    transform=transforms.ToTensor()
)
test_set = torchvision.datasets.FashionMNIST(
    root='E:\project\python\jupyterbook\data',
    train=False,
    download=True,
    transform=transforms.ToTensor()
)
train_loader = Data.DataLoader(
    train_set,
    batch_size=100,
    shuffle=True,
    #num_workers=2
)
test_loader = Data.DataLoader(
    test_set,
    batch_size=100,
    shuffle=False,
    #num_workers=2
)
@torch.no_grad()
def get_correct_nums(predict,labels):
    return predict.argmax(dim=1).eq(labels).sum().item()
@torch.no_grad()
def evaluate(test_loader,net,total_num):
    correct = 0
    for image,label in test_loader:
        predict = net(image)
        correct += get_correct_nums(predict,label)
        pass
    return correct / total_num
network = SoftmaxNet()
optimizer = optim.SGD(network.parameters(),lr=0.05)
for epoch in range(10):
    total_loss = 0
    total_correct = 0
    for image,label in train_loader:
        predict = network(image)
        loss = F.cross_entropy(predict,label)
        total_loss += loss.item()
        total_correct += get_correct_nums(predict,label)
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()
        pass
    print(
        'epoch',epoch,
        'loss',total_loss,
        'train_acc',total_correct / len(train_set),
        'test_acc',evaluate(test_loader,network,len(test_set))
    )

以上就是pytorch深度學習softmax實現(xiàn)解析的詳細內(nèi)容,更多關(guān)于pytorch深度學習的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python正則表達式的應用詳解

    Python正則表達式的應用詳解

    這篇文章主要介紹了Python中正則表達式的詳細教程,正則表達式是Python學習進階當中的重要內(nèi)容,需要的朋友可以參考下,希望能給你帶來幫助
    2021-08-08
  • python在線編譯器的簡單原理及簡單實現(xiàn)代碼

    python在線編譯器的簡單原理及簡單實現(xiàn)代碼

    這篇文章主要介紹了python在線編譯器的簡單原理及簡單實現(xiàn)代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-02-02
  • Python筆記之Scipy.stats.norm函數(shù)使用解析

    Python筆記之Scipy.stats.norm函數(shù)使用解析

    這篇文章主要介紹了Python筆記之Scipy.stats.norm函數(shù)使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • python+matplotlib繪制旋轉(zhuǎn)橢圓實例代碼

    python+matplotlib繪制旋轉(zhuǎn)橢圓實例代碼

    這篇文章主要介紹了python+matplotlib繪制旋轉(zhuǎn)橢圓實例代碼,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • 用Python進行行為驅(qū)動開發(fā)的入門教程

    用Python進行行為驅(qū)動開發(fā)的入門教程

    這篇文章主要介紹了用Python進行行為驅(qū)動開發(fā)的入門教程,本文也對BDD的概念做了詳細的解釋,需要的朋友可以參考下
    2015-04-04
  • Python?網(wǎng)易易盾滑塊驗證功能的實現(xiàn)

    Python?網(wǎng)易易盾滑塊驗證功能的實現(xiàn)

    這篇文章主要介紹了Python?網(wǎng)易易盾滑塊驗證,主要是借助之前寫阿里云盾滑塊和極驗滑塊的經(jīng)驗寫的本文,通過使用selenium請求url,并觸發(fā)滑塊驗證,需要的朋友可以參考下
    2022-05-05
  • Python使用sqlalchemy實現(xiàn)連接數(shù)據(jù)庫的幫助類

    Python使用sqlalchemy實現(xiàn)連接數(shù)據(jù)庫的幫助類

    這篇文章主要為大家詳細介紹了Python如何使用sqlalchemy實現(xiàn)連接數(shù)據(jù)庫的幫助類,文中的示例代碼講解詳細,具有一定的借鑒價值,需要的可以參考下
    2024-02-02
  • VsCode中超好用的8個python插件推薦

    VsCode中超好用的8個python插件推薦

    本人日常使用vscode進行開發(fā),并且比較喜歡折騰vscode,會到處找這一些好玩的插件,于是越攢越多,下面這篇文章主要給大家介紹了關(guān)于VsCode中超好用的8個python擴展插件的相關(guān)資料,需要的朋友可以參考下
    2022-12-12
  • python二元表達式用法

    python二元表達式用法

    今天小編就為大家分享一篇python二元表達式用法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • Python測試線程應用程序過程解析

    Python測試線程應用程序過程解析

    這篇文章主要介紹了Python測試線程應用程序過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-12-12

最新評論

丹阳市| 铜陵市| 莎车县| 北川| 天门市| 道真| 客服| 永兴县| 惠来县| 封开县| 金川县| 新密市| 临泽县| 尉氏县| 滕州市| 墨江| 固镇县| 日土县| 花莲市| 任丘市| 民权县| 湖南省| 远安县| 阳东县| 西盟| 临汾市| 科技| 简阳市| 丰城市| 敦化市| 景德镇市| 富锦市| 辰溪县| 邯郸市| 桃园市| 云南省| 寿阳县| 尚志市| 繁昌县| 靖州| 富顺县|