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 ...