摘要:測(cè)試結(jié)果最后兩行分別為預(yù)測(cè)類別與真實(shí)類別。這里將其分成了類展平多維的卷積圖成訓(xùn)練優(yōu)化器損失函數(shù)開(kāi)始訓(xùn)練將數(shù)據(jù)輸入并且得到計(jì)算與真實(shí)值之間的誤差清空上一步殘余更新參數(shù)值誤差反向傳播,讓參數(shù)進(jìn)行更新將更新后的參數(shù)值施加到的上測(cè)試選取個(gè)數(shù)據(jù)
測(cè)試結(jié)果
最后兩行分別為預(yù)測(cè)類別與真實(shí)類別。
這里的數(shù)據(jù)使用的是mnist數(shù)據(jù)集,大家可以將代碼中的DOWNLOAD_MNIST值修改為True進(jìn)行自動(dòng)下載。
import torch import torch.nn as nn import torch.utils.data as Data import torchvision # 數(shù)據(jù)庫(kù)模塊 import matplotlib.pyplot as plt #訓(xùn)練整批數(shù)據(jù)多少次,這里為了節(jié)約時(shí)間,只訓(xùn)練一次 EPOCH=1 #每次批處理50個(gè)數(shù)據(jù) BATCH_SIZE=50 #學(xué)習(xí)效率 LR=0.001 # 如果已經(jīng)下載好了mnist數(shù)據(jù)就寫上False DOWNLOAD_MNIST = False #訓(xùn)練的數(shù)據(jù)集:Mnist手寫數(shù)字 train_data=torchvision.datasets.MNIST( #保存或提取數(shù)據(jù)集的位置 root="./mnist/", #該數(shù)據(jù)是訓(xùn)練數(shù)據(jù) train=True, #轉(zhuǎn)換PIL.Image or numpy.ndarray成torch.FloatTensor (C x H x W), 訓(xùn)練的時(shí)候 normalize 成 [0.0, 1.0] 區(qū)間 transform=torchvision.transforms.ToTensor(), #沒(méi)下載就下載,下載了就不用再下了 download=DOWNLOAD_MNIST, ) #繪制一下數(shù)據(jù)集 #黑色的地方的值都是0, 白色的地方值大于0. print(train_data.train_data.size()) # (60000, 28, 28) print(train_data.train_labels.size()) # (60000) plt.imshow(train_data.train_data[2].numpy(), cmap="gray") plt.title("%i" % train_data.train_labels[2]) plt.show() #測(cè)試數(shù)據(jù) test_data=torchvision.datasets.MNIST(root="./mnist/",train=False) #批訓(xùn)練50samples,1 channel,28x28 (50, 1, 28, 28) train_loader=Data.DataLoader(dataset=train_data,batch_size=BATCH_SIZE,shuffle=True) #這里只測(cè)試了前2000個(gè) #特征 test_x=torch.unsqueeze(test_data.test_data,dim=1).type(torch.FloatTensor)[:2000]/255. #標(biāo)簽 test_y=test_data.test_labels[:2000] #構(gòu)建CNN模型 class CNN(nn.Module): def __init__(self): super(CNN,self).__init__() #input shape(1,28,28) self.conv1=nn.Sequential( #卷積 nn.Conv2d( in_channels=1, out_channels=16, #filter size kernel_size=5, #filter movement/step stride=1, #如果想要con2d出來(lái)的圖片長(zhǎng)寬沒(méi)有變化, #padding=(kernel_size-1)/2當(dāng)stride=1 padding=2, ), #output shape(16,28,28) #激勵(lì)函數(shù) nn.ReLU(), #池化 # 在2x2空間里向下采樣,output shape(16,14,14) nn.MaxPool2d(kernel_size=2), ) #input shape(16,14,14) self.conv2=nn.Sequential( nn.Conv2d(16,32,5,1,2), #output shape(32,14,14) #激勵(lì)函數(shù) nn.ReLU(), #output shape(32,7,7) nn.MaxPool2d(2), ) #全連接層——進(jìn)行分類。這里將其分成了10類 self.out=nn.Linear(32*7*7,10) def forward(self,x): x=self.conv1(x) x=self.conv2(x) #展平多維的卷積圖成(batch_size,32*7*7) x=x.view(x.size(0),-1) output=self.out(x) return output cnn=CNN() print(cnn) #訓(xùn)練 #優(yōu)化器 optimizer=torch.optim.Adam(cnn.parameters(),lr=LR) #損失函數(shù) loss_func=nn.CrossEntropyLoss() #開(kāi)始訓(xùn)練 for epoch in range(EPOCH): for step,(b_x,b_y) in enumerate(train_loader): #將數(shù)據(jù)輸入nn并且得到output output=cnn(b_x) #計(jì)算output與真實(shí)值之間的誤差 loss=loss_func(output,b_y) #清空上一步殘余更新參數(shù)值 optimizer.zero_grad() #誤差反向傳播,讓參數(shù)進(jìn)行更新 loss.backward() #將更新后的參數(shù)值施加到nn的parameters上 optimizer.step() #測(cè)試:選取10個(gè)數(shù)據(jù) test_output=cnn(test_x[:10]) pred_y=torch.max(test_output,1)[1].data.numpy().squeeze() print(pred_y, "prediction number") print(test_y[:10].numpy(), "real number") # if __name__=="__main__": # print("hello word")
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/43525.html
摘要:而在卷積神經(jīng)網(wǎng)絡(luò)中,這兩個(gè)神經(jīng)元可以共用一套參數(shù),用來(lái)做同一件事情。卷積神經(jīng)網(wǎng)絡(luò)的基本結(jié)構(gòu)卷積神經(jīng)網(wǎng)絡(luò)的基本結(jié)構(gòu)如圖所示從右到左,輸入一張圖片卷積層池化層卷積層池化層展開(kāi)全連接神經(jīng)網(wǎng)絡(luò)輸出。最近幾天陸續(xù)補(bǔ)充了一些線性回歸部分內(nèi)容,這節(jié)繼續(xù)機(jī)器學(xué)習(xí)基礎(chǔ)部分,這節(jié)主要對(duì)CNN的基礎(chǔ)進(jìn)行整理,僅限于基礎(chǔ)原理的了解,更復(fù)雜的內(nèi)容和實(shí)踐放在以后再進(jìn)行總結(jié)。卷積神經(jīng)網(wǎng)絡(luò)的基本原理 前面對(duì)全連接神經(jīng)網(wǎng)絡(luò)...
摘要:在計(jì)算機(jī)視覺(jué)領(lǐng)域,對(duì)卷積神經(jīng)網(wǎng)絡(luò)簡(jiǎn)稱為的研究和應(yīng)用都取得了顯著的成果。文章討論了在卷積神經(jīng)網(wǎng)絡(luò)中,該如何調(diào)整超參數(shù)以及可視化卷積層。卷積神經(jīng)網(wǎng)絡(luò)可以完成這項(xiàng)任務(wù)。 在深度學(xué)習(xí)中,有許多不同的深度網(wǎng)絡(luò)結(jié)構(gòu),包括卷積神經(jīng)網(wǎng)絡(luò)(CNN或convnet)、長(zhǎng)短期記憶網(wǎng)絡(luò)(LSTM)和生成對(duì)抗網(wǎng)絡(luò)(GAN)等。在計(jì)算機(jī)視覺(jué)領(lǐng)域,對(duì)卷積神經(jīng)網(wǎng)絡(luò)(簡(jiǎn)稱為CNN)的研究和應(yīng)用都取得了顯著的成果。CNN網(wǎng)絡(luò)最...
閱讀 1473·2023-04-25 16:31
閱讀 2070·2021-11-24 10:33
閱讀 2768·2021-09-23 11:33
閱讀 2562·2021-09-23 11:31
閱讀 2951·2021-09-08 09:45
閱讀 2365·2021-09-06 15:02
閱讀 2674·2019-08-30 14:21
閱讀 2341·2019-08-30 12:56