摘要:測試結果最后兩行分別為預測類別與真實類別。這里將其分成了類展平多維的卷積圖成訓練優化器損失函數開始訓練將數據輸入并且得到計算與真實值之間的誤差清空上一步殘余更新參數值誤差反向傳播,讓參數進行更新將更新后的參數值施加到的上測試選取個數據
測試結果
最后兩行分別為預測類別與真實類別。
這里的數據使用的是mnist數據集,大家可以將代碼中的DOWNLOAD_MNIST值修改為True進行自動下載。
import torch import torch.nn as nn import torch.utils.data as Data import torchvision # 數據庫模塊 import matplotlib.pyplot as plt #訓練整批數據多少次,這里為了節約時間,只訓練一次 EPOCH=1 #每次批處理50個數據 BATCH_SIZE=50 #學習效率 LR=0.001 # 如果已經下載好了mnist數據就寫上False DOWNLOAD_MNIST = False #訓練的數據集:Mnist手寫數字 train_data=torchvision.datasets.MNIST( #保存或提取數據集的位置 root="./mnist/", #該數據是訓練數據 train=True, #轉換PIL.Image or numpy.ndarray成torch.FloatTensor (C x H x W), 訓練的時候 normalize 成 [0.0, 1.0] 區間 transform=torchvision.transforms.ToTensor(), #沒下載就下載,下載了就不用再下了 download=DOWNLOAD_MNIST, ) #繪制一下數據集 #黑色的地方的值都是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() #測試數據 test_data=torchvision.datasets.MNIST(root="./mnist/",train=False) #批訓練50samples,1 channel,28x28 (50, 1, 28, 28) train_loader=Data.DataLoader(dataset=train_data,batch_size=BATCH_SIZE,shuffle=True) #這里只測試了前2000個 #特征 test_x=torch.unsqueeze(test_data.test_data,dim=1).type(torch.FloatTensor)[:2000]/255. #標簽 test_y=test_data.test_labels[:2000] #構建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出來的圖片長寬沒有變化, #padding=(kernel_size-1)/2當stride=1 padding=2, ), #output shape(16,28,28) #激勵函數 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) #激勵函數 nn.ReLU(), #output shape(32,7,7) nn.MaxPool2d(2), ) #全連接層——進行分類。這里將其分成了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) #訓練 #優化器 optimizer=torch.optim.Adam(cnn.parameters(),lr=LR) #損失函數 loss_func=nn.CrossEntropyLoss() #開始訓練 for epoch in range(EPOCH): for step,(b_x,b_y) in enumerate(train_loader): #將數據輸入nn并且得到output output=cnn(b_x) #計算output與真實值之間的誤差 loss=loss_func(output,b_y) #清空上一步殘余更新參數值 optimizer.zero_grad() #誤差反向傳播,讓參數進行更新 loss.backward() #將更新后的參數值施加到nn的parameters上 optimizer.step() #測試:選取10個數據 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")
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/43525.html
摘要:而在卷積神經網絡中,這兩個神經元可以共用一套參數,用來做同一件事情。卷積神經網絡的基本結構卷積神經網絡的基本結構如圖所示從右到左,輸入一張圖片卷積層池化層卷積層池化層展開全連接神經網絡輸出。最近幾天陸續補充了一些線性回歸部分內容,這節繼續機器學習基礎部分,這節主要對CNN的基礎進行整理,僅限于基礎原理的了解,更復雜的內容和實踐放在以后再進行總結。卷積神經網絡的基本原理 前面對全連接神經網絡...
摘要:在計算機視覺領域,對卷積神經網絡簡稱為的研究和應用都取得了顯著的成果。文章討論了在卷積神經網絡中,該如何調整超參數以及可視化卷積層。卷積神經網絡可以完成這項任務。 在深度學習中,有許多不同的深度網絡結構,包括卷積神經網絡(CNN或convnet)、長短期記憶網絡(LSTM)和生成對抗網絡(GAN)等。在計算機視覺領域,對卷積神經網絡(簡稱為CNN)的研究和應用都取得了顯著的成果。CNN網絡最...
閱讀 1438·2023-04-25 16:31
閱讀 2040·2021-11-24 10:33
閱讀 2745·2021-09-23 11:33
閱讀 2528·2021-09-23 11:31
閱讀 2900·2021-09-08 09:45
閱讀 2336·2021-09-06 15:02
閱讀 2647·2019-08-30 14:21
閱讀 2313·2019-08-30 12:56