PyTorch 深度學習實踐 第9講

2021-10-10 13:17:56 字數 3918 閱讀 9829

第9講  多分類問題 源**

b站 劉二大人 ,傳送門pytorch深度學習實踐——多分類問題

說明: 1、softmax的輸入不需要再做非線性變換,也就是說softmax之前不再需要啟用函式(relu)。softmax兩個作用,如果在進行softmax前的input有負數,通過指數變換,得到正數。所有類的概率求和為1。

2、y的標籤編碼方式是one-hot。我對one-hot的理解是只有一位是1,其他位為0。(但是標籤的one-hot編碼是演算法完成的,演算法的輸入仍為原始標籤)

3、多分類問題,標籤y的型別是longtensor。比如說0-9分類問題,如果y = torch.longtensor([3]),對應的one-hot是[0,0,0,1,0,0,0,0,0,0].(這裡要注意,如果使用了one-hot,標籤y的型別是longtensor,糖尿病資料集中的target的型別是floattensor)

4、crossentropyloss <==> logsoftmax + nllloss。也就是說使用crossentropyloss最後一層(線性層)是不需要做其他變化的;使用nllloss之前,需要對最後一層(線性層)先進行softmax處理,再進行log操作。      

**說明:1、第8講 from torch.utils.data import dataset,第9講 from torchvision import datasets。該datasets裡面init,getitem,len魔法函式已實現。

2、torch.max的返回值有兩個,第乙個是每一行的最大值是多少,第二個是每一行最大值的下標(索引)是多少。

3、全連線神經網路

4、torch.no_grad()

python中with的用法

5、**中"_"的說明  python中各種下劃線的操作

6、torch.max( )的用法

torch.max( )使用講解

import torch

from torchvision import transforms

from torchvision import datasets

from torch.utils.data import dataloader

import torch.nn.functional as f

import torch.optim as optim

# prepare dataset

batch_size = 64

transform = transforms.compose([transforms.totensor(), transforms.normalize((0.1307,), (0.3081,))]) # 歸一化,均值和方差

train_dataset = datasets.mnist(root='../dataset/mnist/', train=true, download=true, transform=transform)

train_loader = dataloader(train_dataset, shuffle=true, batch_size=batch_size)

test_dataset = datasets.mnist(root='../dataset/mnist/', train=false, download=true, transform=transform)

test_loader = dataloader(test_dataset, shuffle=false, batch_size=batch_size)

# design model using class

class net(torch.nn.module):

def __init__(self):

super(net, self).__init__()

self.l1 = torch.nn.linear(784, 512)

self.l2 = torch.nn.linear(512, 256)

self.l3 = torch.nn.linear(256, 128)

self.l4 = torch.nn.linear(128, 64)

self.l5 = torch.nn.linear(64, 10)

def forward(self, x):

x = x.view(-1, 784) # -1其實就是自動獲取mini_batch

x = f.relu(self.l1(x))

x = f.relu(self.l2(x))

x = f.relu(self.l3(x))

x = f.relu(self.l4(x))

return self.l5(x) # 最後一層不做啟用,不進行非線性變換

model = net()

# construct loss and optimizer

criterion = torch.nn.crossentropyloss()

optimizer = optim.sgd(model.parameters(), lr=0.01, momentum=0.5)

# training cycle forward, backward, update

def train(epoch):

running_loss = 0.0

for batch_idx, data in enumerate(train_loader, 0):

# 獲得乙個批次的資料和標籤

inputs, target = data

optimizer.zero_grad()

# 獲得模型**結果(64, 10)

outputs = model(inputs)

# 交叉熵代價函式outputs(64,10),target(64)

loss = criterion(outputs, target)

loss.backward()

optimizer.step()

running_loss += loss.item()

if batch_idx % 300 == 299:

print('[%d, %5d] loss: %.3f' % (epoch+1, batch_idx+1, running_loss/300))

running_loss = 0.0

def test():

correct = 0

total = 0

with torch.no_grad():

for data in test_loader:

images, labels = data

outputs = model(images)

_, predicted = torch.max(outputs.data, dim=1) # dim = 1 列是第0個維度,行是第1個維度

total += labels.size(0)

correct += (predicted == labels).sum().item() # 張量之間的比較運算

print('accuracy on test set: %d %% ' % (100*correct/total))

if __name__ == '__main__':

for epoch in range(10):

train(epoch)

test()

PyTorch 深度學習實踐 第2講

第2講 linear model 源 b站 劉二大人 傳送門 pytorch深度學習實踐 線性模型 說明 1 函式forward 中,有乙個變數w。這個變數最終的值是從for迴圈中傳入的。2 for迴圈中,使用了np.arange。若對numpy不太熟悉,傳送門numpy資料計算從入門到實戰 3 p...

PyTorch 深度學習實踐 第2 3講

第2講 linear model 源 import numpy as np import matplotlib.pyplot as plt x data 1.0,2.0,3.0 y data 2.0,4.0,6.0 def forward x return x w def loss x,y y pr...

PyTorch深度學習實踐 Overview

pytorch是乙個基於torch的python開源機器學習庫,用於自然語言處理等應用程式。它主要由facebookd的人工智慧小組開發,不僅能夠 實現強大的gpu加速,同時還支援動態神經網路。pytorch是乙個動態的框架,而tensorflow是靜態框架 2.x版本也為動態框架優先 靜態框架就是...