pytorch 學習筆記(三)

2021-10-09 22:19:34 字數 3333 閱讀 8673

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

batch_size =

64transform = transforms.compose(

[transforms.totensor(

),transforms.normalize(

(0.1307,)

,(0.3081,)

)])#將影象變數轉化為張量,並將0到255的數值壓縮到(0,1)的正態分佈上

train_dataset = datasets.mnist(root=

'c:/users/王莫莫/desktop/計算機視覺系列課程-資料/mnist/'

,train=

true

,download=

true

,transform=transform)

train_loader = dataloader(train_dataset,shuffle=

true

,batch_size=batch_size)

test_dataset = datasets.mnist(root=

'c:/users/王莫莫/desktop/計算機視覺系列課程-資料/mnist/'

,train=

false

,download=

true

,transform=transform)

test_loader = dataloader(test_dataset,shuffle=

false

,batch_size=batch_size)

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)defforward

(self, x)

: x = x.view(-1

,784

)#view函式(-1)表示根據另外乙個數來自動調整維度,如果這裡只有乙個維度,就會將x裡面的所有維度資料轉化成一維的,並且按先後順序排列。

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(

)criterion = torch.nn.crossentropyloss(

)optimizer = optim.sgd(model.parameters(

), lr=

0.01

, momentum=

0.5)

deftrain

(epoch)

: running_loss =

0.0for batch_idx, data in

enumerate

(train_loader,0)

: inputs,target = data

optimizer.zero_grad(

)# forward + backward + update

outputs = model(inputs)

loss = criterion(outputs,target)

loss.backward(

) optimizer.step(

) running_loss += loss.item(

)if batch_idx %

300==

299:

#300代更新一次迭代,loss也重新開始計算

print

('[%d, %5d] loss: %.3f'

%(epoch +

1, batch_idx +

1, running_loss /

300)

) running_loss =

0.0def

test()

: correct =

0 total =

0with torch.no_grad():

#torch.no_grad表示後續的程式不進行梯度計算

for data in test_loader:

images,labels = data

outputs = model(images)

_, predicted = torch.

max(outputs.data, dim=1)

#dim有0,1兩個值,0表示按行搜尋,1表示按列搜尋,torch.max返回搜尋資料的最大值與下標,我們這裡predicted代表的是返回的下標

total += labels.size(0)

#data資料的標籤,每讀入一次,total總數增加

correct +=

(predicted == labels)

.sum()

.item(

)#如果是僅包含乙個元素的tensor,可以使用.item()來得到對應的python數值

print

('accuracy on test set: %d %%'%(

100* correct / total)

)if __name__ ==

'__main__'

:for epoch in

range(10

):train(epoch)

if epoch ==9:

test(

)

Pytorch 學習筆記

本渣的pytorch 逐步學習鞏固經歷,希望各位大佬指正,寫這個部落格也為了鞏固下記憶。a a b c 表示從 a 取到 b 步長為 c c 2 則表示每2個數取1個 若為a 1 1 1 即表示從倒數最後乙個到正數第 1 個 最後乙個 1 表示倒著取 如下 陣列的第乙個為 0 啊,第 0 個!彆扭 ...

Pytorch學習筆記

資料集 penn fudan資料集 在學習pytorch官網教程時,作者對penn fudan資料集進行了定義,並且在自定義的資料集上實現了對r cnn模型的微調。此篇筆記簡單總結一下pytorch如何實現定義自己的資料集 資料集必須繼承torch.utils.data.dataset類,並且實現 ...

Pytorch學習筆記

lesson 1.張量 tensor 的建立和常用方法 一 張量 tensor 的基本建立及其型別 import torch 匯入pytorch包 import numpy as np torch.version 檢視版本號1.張量 tensor 函式建立方法 張量 tensor 函式建立方法 t ...