成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

機(jī)器學(xué)習(xí) | CNN卷積神經(jīng)網(wǎng)絡(luò)

ghnor / 1281人閱讀

摘要:測(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ù)預(yù)覽

這里的數(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

相關(guān)文章

  • 機(jī)器學(xué)習(xí)基礎(chǔ)】卷積神經(jīng)網(wǎng)絡(luò)CNN)基礎(chǔ)

    摘要:而在卷積神經(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ò)...

    番茄西紅柿 評(píng)論0 收藏2637
  • CNN超參數(shù)優(yōu)化和可視化技巧詳解

    摘要:在計(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ò)最...

    Fundebug 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<