最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

Pytorch學(xué)習(xí)筆記7:MNIST多分類實(shí)踐

2020-11-12 11:29 作者:車科技2020  | 我要投稿

#需要import的lib

import torch
import numpy as np
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from torchvision import datasets, transforms
from torch.utils.data import DataLoader

#需要import的lib

print('——————————MNIST多分類實(shí)戰(zhàn)——————————')
batch_size=200
learning_rate=0.01
epochs=10

train_loader=torch.utils.data.DataLoader(
? ?datasets.MNIST('../data',train=True,download=True,
? ? ? ? ? ? ? ? ? transform=transforms.Compose(
? ? ? ? ? ? ? ? ? ? ? [
? ? ? ? ? ? ? ? ? ? ? ? ? transforms.ToTensor(),
? ? ? ? ? ? ? ? ? ? ? ? ? transforms.Normalize((0.1307,),(0.3081,))
? ? ? ? ? ? ? ? ? ? ? ]
? ? ? ? ? ? ? ? ? )

? ?),
? ?batch_size=batch_size,shuffle=True #每個(gè)batch load的數(shù)據(jù),是不是打亂每個(gè)batch的數(shù)據(jù)
)
test_loader=torch.utils.data.DataLoader(
? ?datasets.MNIST('../data',train=False,
? ? ? ? ? ? ? ? ? transform=transforms.Compose(
? ? ? ? ? ? ? ? ? ? ? [
? ? ? ? ? ? ? ? ? ? ? ? ? transforms.ToTensor(),
? ? ? ? ? ? ? ? ? ? ? ? ? transforms.Normalize((0.1307,),(0.3081,))
? ? ? ? ? ? ? ? ? ? ? ]
? ? ? ? ? ? ? ? ? )

? ?),
? ?batch_size=batch_size,shuffle=True #每個(gè)batch load的數(shù)據(jù),是不是打亂每個(gè)batch的數(shù)據(jù)
)

w1,b1=torch.randn(200,784,requires_grad=True),\
? ? ?torch.zeros(200,requires_grad=True)
w2,b2=torch.randn(200,200,requires_grad=True),\
? ? ?torch.zeros(200,requires_grad=True)
w3,b3=torch.randn(10,200,requires_grad=True),\
? ? ?torch.zeros(10,requires_grad=True)

torch.nn.init.kaiming_normal_(w1)#用何凱明的方法初始化數(shù)據(jù)
torch.nn.init.kaiming_normal_(w2)
torch.nn.init.kaiming_normal_(w3)

def forward(x):#定義一個(gè)三層全連接層,用relu防止梯度彌散
? ?x=x@w1.t()+b1
? ?x=torch.relu(x)
? ?x=x@w2.t()+b2
? ?x=torch.relu(x)
? ?x=x@w3.t()+b3
? ?return x

optimizer=torch.optim.SGD([w1,b1,w2,b2,w3,b3],lr=learning_rate)#優(yōu)化器為SGD
criteon=torch.nn.CrossEntropyLoss()#loss函數(shù)為交叉熵

for epoch in range(epochs):
? ?for batch_idx,(data,target) in enumerate(train_loader):
? ? ? ?data=data.view(-1,28*28)

? ? ? ?logits=forward(data) #把數(shù)據(jù)放入神經(jīng)網(wǎng)絡(luò)得出pred的值
? ? ? ?loss=criteon(logits,target) #用loss函數(shù)計(jì)算pred和target的差
? ? ? ?optimizer.zero_grad() #清零梯度
? ? ? ?loss.backward() #重新計(jì)算梯度

? ? ? ?optimizer.step() #用新的梯度計(jì)算新的w b,然后迭代

? ? ? ?if batch_idx % 100 == 0:
? ? ? ? ? ?#print('epoch:',epoch)
? ? ? ? ? ?#print('batch_idx:', batch_idx)
? ? ? ? ? ?#print('len data', len(data))
? ? ? ? ? ?#print('len(train_loader.dataset)', len(train_loader.dataset))
? ? ? ? ? ?#print('len(train_loader)', len(train_loader))
? ? ? ? ? ?print(
? ? ? ? ? ? ? ?'train epoch:{}[{}/{}({:.0f}%)]\tLoss:{:.6f}'.format(
? ? ? ? ? ? ? ? ? ?epoch,batch_idx * len(data), len(train_loader.dataset),
? ? ? ? ? ? ? ? ? ?100. * batch_idx / len(train_loader),loss.item()
? ? ? ? ? ? ? ?)
? ? ? ? ? ?)

? ?test_loss=0
? ?correct=0
? ?for data,target in test_loader:
? ? ? ?data=data.view(-1,28*28)
? ? ? ?logits = forward(data)#把數(shù)據(jù)放入神經(jīng)網(wǎng)絡(luò)得出pred的值
? ? ? ?test_loss +=criteon(logits,target).item()#?累加loss

? ? ? ?pred =logits.data.max(1)[1]#得出pred的最大值,就是網(wǎng)絡(luò)識(shí)別出來(lái)的數(shù)字
? ? ? ?correct +=pred.eq(target.data).sum()#?target.data
? ?test_loss /=len(test_loader.dataset)
? ?#print('len(test_loader.dataset):', len(test_loader.dataset))
? ?print(
? ? ? ?'\ntest set:avg loss:{:.4f},accu:{}/{} ({:.0f}%)\n'.format(
? ? ? ? ? ?test_loss,correct,len(test_loader.dataset),
? ? ? ? ? ?100.*correct/len(test_loader.dataset)
? ? ? ?)
? ?)


print('——————————MNIST多分類實(shí)戰(zhàn)——————————')
print('——————————全連接層——————————')
class MLP(torch.nn.Module):#新建一個(gè)MLP名稱的類
? ?def __init__(self):
? ? ? ?super(MLP, self).__init__()
? ? ? ?self.model=torch.nn.Sequential(
? ? ? ? ? ?torch.nn.Linear(784,200),
? ? ? ? ? ?torch.nn.ReLU(inplace=True),
? ? ? ? ? ?torch.nn.Linear(200, 200),
? ? ? ? ? ?torch.nn.ReLU(inplace=True),
? ? ? ? ? ?torch.nn.Linear(200, 10),
? ? ? ? ? ?torch.nn.ReLU(inplace=True),
? ? ? ?)
def forword(self,x):#自定義forword函數(shù)
? ?x=self.model(x)
? ?return x

net=MLP() #初始化一個(gè)MLP類
a=torch.randn(200,784)
b=forword(net,a)#把類名稱傳遞給函數(shù)
print(b.shape)
print('——————————全連接層——————————')


Pytorch學(xué)習(xí)筆記7:MNIST多分類實(shí)踐的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
塔城市| 清徐县| 伊川县| 靖西县| 上林县| 普兰县| 皋兰县| 眉山市| 衡阳市| 固始县| 罗源县| 视频| 呼玛县| 赤峰市| 搜索| 阿坝县| 泗水县| 建昌县| 南郑县| 临颍县| 芮城县| 聂荣县| 奉新县| 昌吉市| 南丰县| 台中市| 永州市| 调兵山市| 来凤县| 晋城| 海丰县| 平山县| 沂南县| 都兰县| 靖江市| 石门县| 平安县| 抚松县| 临颍县| 七台河市| 晋中市|