10分鐘快速入門PyTorch (4)

經(jīng)過(guò)前面幾節(jié)的學(xué)習(xí),終于完成了我們的基礎(chǔ)部分,下面正式進(jìn)入到了深度學(xué)習(xí)部分。

第一個(gè)要講的當(dāng)然是cnn了,也就是卷積神經(jīng)網(wǎng)絡(luò),這一部分的內(nèi)容在之前的文章小白學(xué)cnn以及keras速成里面已經(jīng)很詳細(xì)的講解過(guò)了,所以這里也就不再細(xì)講了,直接進(jìn)入代碼部分。

Code

數(shù)據(jù)集仍然是使用MNIST手寫字體,和之前一樣做同樣的預(yù)處理。

model

# 定義 Convolution Network 模型
class Cnn(nn.Module):
    def __init__(self, in_dim, n_class):
        super(Cnn, self).__init__()
        self.conv = nn.Sequential(
            nn.Conv2d(in_dim, 6, 3, stride=1, padding=1),
            nn.ReLU(True),
            nn.MaxPool2d(2, 2),
            nn.Conv2d(6, 16, 5, stride=1, padding=0),
            nn.ReLU(True),
            nn.MaxPool2d(2, 2),
        )

        self.fc = nn.Sequential(
            nn.Linear(400, 120),
            nn.Linear(120, 84),
            nn.Linear(84, n_class)
        )

    def forward(self, x):
        out = self.conv(x)
        out = out.view(out.size(0), -1)
        out = self.fc(out)
        return out


model = Cnn(1, 10)  # 圖片大小是28x28
use_gpu = torch.cuda.is_available()  # 判斷是否有GPU加速
if use_gpu:
    model = model.cuda()
# 定義loss和optimizer
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=learning_rate)

以上就是網(wǎng)絡(luò)的模型的部分了。和之前比主要增加了這些不一樣的部分

  • 1 nn.Sequential()
    這個(gè)表示將一個(gè)有序的模塊寫在一起,也就相當(dāng)于將神經(jīng)網(wǎng)絡(luò)的層按順序放在一起,這樣可以方便結(jié)構(gòu)顯示

  • 2 nn.Conv2d()
    這個(gè)是卷積層,里面常用的參數(shù)有四個(gè),in_channels, out_channels, kernel_size, stride, padding
    in_channels表示的是輸入卷積層的圖片厚度

out_channels表示的是要輸出的厚度

kernel_size表示的是卷積核的大小,可以用一個(gè)數(shù)字表示長(zhǎng)寬相等的卷積核,比如kernel_size=3,也可以用不同的數(shù)字表示長(zhǎng)寬不同的卷積核,比如kernel_size=(3, 2)

stride表示卷積核滑動(dòng)的步長(zhǎng)

padding表示的是在圖片周圍填充0的多少,padding=0表示不填充,padding=1四周都填充1維

  • 3 nn.ReLU()
    這個(gè)表示使用ReLU激活函數(shù),里面有一個(gè)參數(shù)inplace,默認(rèn)設(shè)置為False,表示新創(chuàng)建一個(gè)對(duì)象對(duì)其修改,也可以設(shè)置為True,表示直接對(duì)這個(gè)對(duì)象進(jìn)行修改

  • 4 nn.MaxPool2d()
    這個(gè)是最大池化層,當(dāng)然也有平均池化層,里面的參數(shù)有kernel_size, stride, padding

kernel_size表示池化的窗口大小,和卷積層里面的kernel_size是一樣的

stride也和卷積層里面一樣,需要自己設(shè)置滑動(dòng)步長(zhǎng)

padding也和卷積層里面的參數(shù)是一樣的,默認(rèn)是0

模型需要傳入的參數(shù)是輸入的圖片維數(shù)以及輸出的種類數(shù)

train

訓(xùn)練的過(guò)程是一樣的,只是輸入圖片不再需要展開

這是訓(xùn)練20個(gè)epoch的結(jié)果,當(dāng)然你也可以增加訓(xùn)練次數(shù),修改里面的參數(shù)達(dá)到更好的效果,可以參考一下Lenet的網(wǎng)絡(luò)結(jié)構(gòu),自己重新寫一寫

3

大體上簡(jiǎn)單的卷積網(wǎng)絡(luò)就是這么構(gòu)建的,當(dāng)然現(xiàn)在也有很多復(fù)雜的網(wǎng)絡(luò),比如vgg,inceptionv1-v4,resnet以及修正的inception-resnet,這些網(wǎng)絡(luò)都是深層的卷積網(wǎng)絡(luò),有興趣的同學(xué)可以去看看pytorch的官方代碼實(shí)現(xiàn),或者去github上搜索相應(yīng)的網(wǎng)絡(luò)。

下一節(jié)我們將要開始一種特別適合序列數(shù)據(jù)的新的網(wǎng)絡(luò)結(jié)構(gòu),循環(huán)神經(jīng)網(wǎng)絡(luò)。


本文代碼已經(jīng)上傳到了github

歡迎查看我的知乎專欄,深度煉丹

歡迎訪問(wèn)我的博客

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • CNN on TensorFlow 本文大部分內(nèi)容均參考于: An Intuitive Explanation o...
    _Randolph_閱讀 8,009評(píng)論 2 31
  • 2017年8月19日星期六整理第五章部分 此處給出本節(jié)的代碼:https://github.com/Leechen...
    斐波那契的數(shù)字閱讀 1,505評(píng)論 0 1
  • [翻譯 chapter 5 ] PS: 有一部分在另外一臺(tái)電腦上, 明天稍后給出 Input and Kernel...
    斐波那契的數(shù)字閱讀 594評(píng)論 0 0
  • 今天是中醫(yī)整合催眠中高級(jí)研修班第二天,還是學(xué)著以往的技術(shù),比如:清洗大腦、積極自我塑造、能量灌頂、學(xué)習(xí)腦區(qū)...
    元柳青閱讀 1,635評(píng)論 1 1
  • 媽媽今天是你離開我的第五天無(wú)法用語(yǔ)言表達(dá)我現(xiàn)在的心情·心像被針扎 撕粹了我的心 難受無(wú)法入眠。這幾天感覺(jué)時(shí)間過(guò)的好...
    謝謝你的絕情閱讀 220評(píng)論 0 0

友情鏈接更多精彩內(nèi)容