偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

新手必讀!如何入手卷積神經(jīng)網(wǎng)絡(luò)

開發(fā) 開發(fā)工具 深度學(xué)習(xí)
卷積神經(jīng)網(wǎng)絡(luò)可以算是深度神經(jīng)網(wǎng)絡(luò)中很流行的網(wǎng)絡(luò)了。本文從基礎(chǔ)入手,介紹了卷積網(wǎng)絡(luò)的基本原理以及相關(guān)的其它技術(shù),并利用卷積網(wǎng)絡(luò)做了一個簡單項(xiàng)目作為示例參考。

卷積神經(jīng)網(wǎng)絡(luò)可以算是深度神經(jīng)網(wǎng)絡(luò)中很流行的網(wǎng)絡(luò)了。本文從基礎(chǔ)入手,介紹了卷積網(wǎng)絡(luò)的基本原理以及相關(guān)的其它技術(shù),并利用卷積網(wǎng)絡(luò)做了一個簡單項(xiàng)目作為示例參考。想入手 CNN 的朋友不可錯過~

[[267333]]

首先,我們先看看下面這張照片:

[[267334]]

圖源:Pix2PixHD

這不是一張真實(shí)的照片,你可以新建一個窗口來打開它,放大看看,可以看到馬賽克。

實(shí)際上,這張照片是由 AI 生成的,是不是看起來很真實(shí)?

從 Alex Krizhevsky 及其朋友通過 ImageNet 公布這項(xiàng)技術(shù)至今,不過才七年。ImageNet 是一個大規(guī)模圖像識別競賽,每年都會舉辦,識別種類達(dá) 1000 多種,從阿拉斯加雪橇犬到廁紙應(yīng)用盡有。之后,他們又創(chuàng)建了 AlexNet,獲得了 ImageNet 競賽冠軍,遠(yuǎn)超第二名。

這項(xiàng)技術(shù)就是卷積神經(jīng)網(wǎng)絡(luò)。它是深度神經(jīng)網(wǎng)絡(luò)的一個分支,處理圖像的效果格外好。

卷積神經(jīng)網(wǎng)絡(luò)

圖源:ImageNet

上圖是幾年來贏得 ImageNet 挑戰(zhàn)賽的軟件產(chǎn)生的誤差率??梢园l(fā)現(xiàn),2016 年誤差率降到了 5%,已經(jīng)超越人類水平。

深度學(xué)習(xí)的引入與其說是改變規(guī)則,不如說是在打破規(guī)則。

卷積神經(jīng)網(wǎng)絡(luò)架構(gòu)

那么問題來了,卷積神經(jīng)網(wǎng)絡(luò)到底是怎么運(yùn)作的呢?

[[267335]]

卷積神經(jīng)網(wǎng)絡(luò)之所以優(yōu)于其它深度神經(jīng)網(wǎng)絡(luò)是由于它特殊的操作。相比一次只計算圖像中的單個像素,CNN 將多個像素的信息組合在一起(比如上圖中計算了 3*3 的像素),因此能夠理解時間模式。

另外,CNN 可以「看到」一組像素組合成一條直線或者曲線。由于深度神經(jīng)網(wǎng)絡(luò)通常都是多層卷積的堆疊,通過上一層得到了直線或者曲線后,下一層不再組合像素,而是將線組合成形狀,一層一層進(jìn)行下去,直到形成完整的圖片。

卷積神經(jīng)網(wǎng)絡(luò)

來自 Mynepalli 的深度卷積神經(jīng)網(wǎng)絡(luò)圖

要想深入理解 CNN,你需要學(xué)習(xí)很多基礎(chǔ)知識,比如什么是核,什么是池化層。但是現(xiàn)在有很多優(yōu)秀的開源項(xiàng)目,你可以直接在他們的基礎(chǔ)上進(jìn)行研究并加以利用。

這就引入了另一門技術(shù)——遷移學(xué)習(xí)。

遷移學(xué)習(xí)

遷移學(xué)習(xí)使用訓(xùn)練好的深度學(xué)習(xí)模型來學(xué)習(xí)特定的任務(wù)。

舉個栗子,比如你在火車調(diào)度公司工作,你們想在不增加勞動力的情況下,預(yù)測火車是否晚點(diǎn)。

你完全可以利用 ImageNet 上的卷積神經(jīng)網(wǎng)絡(luò)模型,比如說 2015 年的冠軍 ResNet。用火車圖片重新訓(xùn)練網(wǎng)絡(luò),相信我,結(jié)果不會讓你失望的。

遷移學(xué)習(xí)主要有兩大優(yōu)勢:

  • 相比于從頭開始訓(xùn)練,只需要少量圖片就可以得到很好的效果。ImageNet 競賽提供了一百萬張圖片用于訓(xùn)練。使用遷移學(xué)習(xí),你只需要 1000 甚至 100 張圖片就可以訓(xùn)練出一個很好的模型,因?yàn)槟愕念A(yù)訓(xùn)練模型已經(jīng)在一百萬張圖片上訓(xùn)練過了。
  • 較少的訓(xùn)練時間就能實(shí)現(xiàn)良好的性能。為了得到和 ImageNet 模型同樣好的效果,你可能需要訓(xùn)練數(shù)天,這還不包括模型效果不好時對其進(jìn)行調(diào)整所需的時間。然而使用遷移學(xué)習(xí),你可能只需要幾個小時甚至幾分鐘就可以完成特定任務(wù)的訓(xùn)練,大大節(jié)省了時間。

圖像分類到圖像生成

有了遷移學(xué)習(xí)之后大家產(chǎn)生了許多有趣的想法。既然我們可以處理圖像、識別圖像中的信息,那我們?yōu)槭裁床蛔约荷蓤D像呢?

因吹斯汀!

生成對抗網(wǎng)絡(luò)由此應(yīng)運(yùn)而生。

[[267336]]

朱俊彥等人提出的 CycleGAN

給定某些輸入,這項(xiàng)技術(shù)可以生成對應(yīng)的圖片。

如上圖所示,CycleGAN 可以根據(jù)一幅畫生成對應(yīng)的真實(shí)照片,也可以根據(jù)草圖生成背包的照片,甚至可以進(jìn)行超分辨率重建。

[[267337]]

超分辨率生成對抗網(wǎng)絡(luò)

很神奇,對嗎?

當(dāng)然,你可以學(xué)習(xí)構(gòu)建這些網(wǎng)絡(luò)。但如何開始呢?

卷積神經(jīng)網(wǎng)絡(luò)教程

首先你要知道,入門很簡單,但掌握就不是那么容易了。

我們先從最基礎(chǔ)的開始。

[[267338]]

圖源:Thomas Verbruggen on Unsplash

航拍仙人掌識別

這是 Kaggle 上的學(xué)習(xí)項(xiàng)目,你的任務(wù)是識別航拍圖像中是否有柱狀仙人掌。

是不是看起來非常簡單?

Kaggle 提供了 17500 張圖片,其中 4000 張未標(biāo)注的作為測試集。如果你的模型能夠正確標(biāo)注 4000 張圖片,就會得滿分 1 或者 100%。

我找了好久,終于找到下面這個非常適合新手入門的項(xiàng)目。

仙人掌

這張圖像與上面的類似。它大小為 32*32,其中包含或者不包含柱狀仙人掌。因?yàn)槭呛脚膱D片所以包含各種不同角度。

所以你需要什么呢?

用 python 構(gòu)建卷積神經(jīng)網(wǎng)絡(luò)

是的,Python——深度學(xué)習(xí)領(lǐng)域最受歡迎的語言。至于深度學(xué)習(xí)框架,你有很多種選擇,可以自己逐一嘗試:

  • Tensorflow,最受歡迎的深度學(xué)習(xí)框架,由谷歌工程師構(gòu)建,并且擁有最多的貢獻(xiàn)者和粉絲。由于社群比較龐大,當(dāng)你有問題時可以很容易找到解決方案。它們的高階 API keras,在入門者中很受歡迎。
  • Pytorch,我最喜歡的深度學(xué)習(xí)框架。純 Python 實(shí)現(xiàn),因此繼承了 Python 的各種優(yōu)缺點(diǎn)。Python 開發(fā)者會很容易上手。它還有 FastAI 庫提供抽象,就像 Keras 之于 Tensorflow。
  • MXNet,Apache 開發(fā)的深度學(xué)習(xí)框架。
  • Theano,Tensorflow 的前身。
  • CNTK,微軟開發(fā)的深度學(xué)習(xí)框架。

這篇教程中使用的就是我最喜歡的 Pytorch,并且使用 FastAI。

開始之前,你需要安裝 Python。瀏覽 Python 的官網(wǎng),下載你需要的版本。需要確保的是一定要用 3.6+的版本,否則將不支持你需要用到的一些庫。

現(xiàn)在,打開你的命令行或者終端,安裝下面這些庫:

  1. pip install numpy  
  2. pip install pandas  
  3. pip install jupyter 

Numpy 用于存儲輸入圖像,pandas 用于處理 CSV 文件,Jupyter notebook 用于編碼。

然后,去 Pytorch 官網(wǎng)下載需要的版本,并且如果你想加速訓(xùn)練的話,要安裝 CUDA 版本的 Pytorch,并且版本至少是 1.0 以上。

上面這些搞定之后,安裝 torchvision 和 FastAI:

  1. pip install torchvision  
  2. pip install fastai 

運(yùn)行 Jupyter notebook 命令,打開 Jupyter,它將打開一個瀏覽器窗口。

這樣所需環(huán)境就配置好了,我們開始吧。

準(zhǔn)備數(shù)據(jù)

導(dǎo)入需要的代碼:

  1. import numpy as np 
  2. import pandas as pd  
  3. from pathlib import Path  
  4. from fastai import *  
  5. from fastai.vision import *  
  6. import torch  
  7. %matplotlib inline 

Numpy 和 Pandas 基本是做什么任務(wù)都會需要的。FastAI 和 Torch 是你的深度學(xué)習(xí)庫。Matplotlib Inline 用于顯示圖表。

下面就可以從 Kaggle 競賽官網(wǎng)上下載數(shù)據(jù)了。

解壓 zip 文件,并放置于 Jupyter notebook 文件夾中。

假設(shè)你的 notebook 被命名為 Cacti。你的文件夾結(jié)構(gòu)會是下面這樣:

Train 文件夾里包含所有的訓(xùn)練圖片。

Test 文件夾是用于提交的測試圖片。

Train CSV 文檔里包含訓(xùn)練數(shù)據(jù)的信息,將圖片名與列 has_cactus 映射,如果該列有 cactus,則值為 1,否則為 0。

Sample Submission CSV 中是提交所需的格式。文件名和 Test 文件夾中的圖片相對應(yīng)。

  1. train_df = pd.read_csv("train.csv") 

將 Train CSV 文檔加載到數(shù)據(jù)幀中。

  1. data_folder = Path(".")  
  2. train_images = ImageList.from_df(train_df, path=data_folderfolder='train'

利用 ImageList from_df 方法創(chuàng)建加載生成器,以便將 train_df 數(shù)據(jù)幀和 train 文件夾中的圖像進(jìn)行映射。

數(shù)據(jù)增強(qiáng)

這是一種根據(jù)現(xiàn)有數(shù)據(jù)創(chuàng)建更多數(shù)據(jù)的技術(shù)。一張貓的圖片水平翻轉(zhuǎn)之后仍然是貓的圖片。但通過這樣做,你可以把你的數(shù)據(jù)擴(kuò)增至兩倍、四倍甚至 16 倍。

如果你數(shù)據(jù)量比較少,可以嘗試這種方法。

  1. transformations = get_transforms(do_flip=Trueflip_vert=Truemax_rotate=10.0, max_zoom=1.1, max_lighting=0.2, max_warp=0.2, p_affine=0.75, p_lighting=0.75) 

FastAI 提供了 get_transform 函數(shù)來做這些事情。你可以水平翻轉(zhuǎn)、垂直翻轉(zhuǎn)、旋轉(zhuǎn)、放大、提高光度/亮度或者加仿射變換來增強(qiáng)數(shù)據(jù)。

你可以用我上邊提供的參數(shù)試一下圖片會變成什么樣?;蛘吣憧梢栽敿?xì)閱讀官方文檔。

然后,對你的圖像序列做上述預(yù)處理。

  1. train_imgtrain_img = train_img.transform(transformations, size=128

參數(shù)大小將用于放大或縮小輸入,以匹配你將使用的神經(jīng)網(wǎng)絡(luò)。我所用的網(wǎng)絡(luò)是 DenseNet——ImageNet 2017 最佳論文獎的成果,它要輸入的圖像大小為 128*128。

準(zhǔn)備訓(xùn)練

讀取數(shù)據(jù)之后,就到了深度學(xué)習(xí)最關(guān)鍵的一步——訓(xùn)練。這個過程也是深度學(xué)習(xí)中學(xué)習(xí)的由來。網(wǎng)絡(luò)從你的數(shù)據(jù)中學(xué)習(xí)并且依據(jù)學(xué)習(xí)到的結(jié)果調(diào)整自身參數(shù),直到在數(shù)據(jù)上得到比較好的效果。

  1. test_df = pd.read_csv("sample_submission.csv")  
  2. test_img = ImageList.from_df(test_df, path=data_folderfolder='test'
  3. train_imgtrain_img = train_img  
  4.           .split_by_rand_pct(0.01)  
  5.           .label_from_df()  
  6.           .add_test(test_img)  
  7.           .databunch(path='.'bs=64device=torch.device('cuda:0'))              
  8.           .normalize(imagenet_stats) 

在訓(xùn)練這一步,你需要把訓(xùn)練數(shù)據(jù)分出一小部分做驗(yàn)證集。你不可以用這部分?jǐn)?shù)據(jù)來訓(xùn)練,因?yàn)樗鼈冎皇怯脕碜鲵?yàn)證的。當(dāng)你的卷積神經(jīng)網(wǎng)絡(luò)在驗(yàn)證集上效果較好時,很有可能在測試集上也可以提交一個比較好的結(jié)果。

FastAI 提供了 split_by_rand_pct 函數(shù),可以很方便地進(jìn)行以上操作。

databunch 函數(shù)可以進(jìn)行批處理。由于 GPU 內(nèi)存限制,我的批大小為 64。如果你沒有 GPU,忽略 device 參數(shù)這一項(xiàng)。

之后,由于你使用的是預(yù)訓(xùn)練網(wǎng)絡(luò),用 normalize 函數(shù)來進(jìn)行圖像歸一化。imagenet_stats 函數(shù)會根據(jù) ImageNet 預(yù)訓(xùn)練模型的訓(xùn)練方式歸一化輸入圖像。

把測試數(shù)據(jù)也加入訓(xùn)練數(shù)據(jù)列表里,可以使稍后預(yù)測更容易,免得再進(jìn)行一次預(yù)處理。記住,這些圖像不能用于訓(xùn)練,也不可以用來做驗(yàn)證。這樣做只是為了確保訓(xùn)練圖片和測試圖片采用了完全相同的預(yù)處理方式。

  1. learn = cnn_learner(train_img, models.densenet161, metrics=[error_rate, accuracy]) 

現(xiàn)在數(shù)據(jù)準(zhǔn)備工作已經(jīng)做完了?,F(xiàn)在,用 cnn_leaner 創(chuàng)建一個訓(xùn)練器。如上所述,我是采用 DenseNet 作為預(yù)訓(xùn)練網(wǎng)絡(luò)的,當(dāng)然你也可以選擇 TorchVision 提供的其他網(wǎng)絡(luò)。

單周期技術(shù)

現(xiàn)在你可以開始訓(xùn)練了。但是,包括卷積神經(jīng)網(wǎng)絡(luò)在內(nèi),深度學(xué)習(xí)訓(xùn)練的一大難題就是,如何選擇正確的學(xué)習(xí)率。學(xué)習(xí)率決定了進(jìn)行梯度下降時更新參數(shù)減小誤差的幅度。

[[267339]]

如上圖所示,大一些的學(xué)習(xí)率使訓(xùn)練過程更快,但更容易錯過誤差邊界,甚至?xí)隹煽胤秶瑹o法收斂。然而,當(dāng)使用稍微小一點(diǎn)的學(xué)習(xí)率時,訓(xùn)練過程會更慢,但不會發(fā)散。

所以,選擇合適的學(xué)習(xí)率非常重要。我們要找到的是足夠大卻又不會使訓(xùn)練發(fā)散的恰當(dāng)學(xué)習(xí)率。

但說起來容易做起來難。

所以,一個叫 Leslie Smith 的人提出了單周期策略。

簡單來說,就是先暴力查找?guī)讉€不同的學(xué)習(xí)率,然后選擇一個最接近最小誤差但還有進(jìn)步空間的。代碼如下:

  1. learn.lr_find()  
  2. learn.recorder.plot() 

你會得到如下輸出:

誤差最小值在 10^-1 位置,所以我們可以使用略小于這個值的學(xué)習(xí)率,比如 3*10^-2。

  1. lr = 3e-02  
  2. learn.fit_one_cycle(5, slice(lr)) 

訓(xùn)練幾個 epoch(這里我選擇 5,不太大也不太小),然后看看結(jié)果。

等等,怎么回事?!

驗(yàn)證集準(zhǔn)確率達(dá)到了 100%!訓(xùn)練過程實(shí)際上是非常高效的,只用了六分鐘時間。多么幸運(yùn)!實(shí)際上,你可能需要數(shù)次迭代才能找到合適的算法。

我等不及要提交了!哈哈。下面讓我們預(yù)測并提交測試集結(jié)果吧。

  1. preds,_ = learn.get_preds(ds_type=DatasetType.Test) test_df.has_cactus = preds.numpy()[:, 0] 

由于之前已經(jīng)把測試圖片放入訓(xùn)練圖片列表中了,因此不需要再對測試圖片做預(yù)處理。

  1. test_df.to_csv('submission.csv', index=False

上面這行代碼會創(chuàng)建一個 CSV 文件,其中包含 4000 張測試圖像的名稱以及每張圖像是否包含仙人掌的 label。

當(dāng)我嘗試提交時,我發(fā)現(xiàn)需要通過 Kaggle 核來提交 CSV,這是我之前沒有注意到的。

圖源:Kaggle

幸運(yùn)的是,核的操作和 Jupyter notebook 非常相似。你完全可以把 notebook 里創(chuàng)建的東西復(fù)制粘貼過來,然后提交。

然后,Duang~完成了!

天吶!得分竟然為 0.9999,這已經(jīng)非常好了。當(dāng)然如果第一次嘗試就得到這么好的分?jǐn)?shù),應(yīng)該還有進(jìn)步的空間。

所以,我調(diào)整了網(wǎng)絡(luò)結(jié)構(gòu),又嘗試了一次。

得分為 1!我做到了!!所以你也可以,實(shí)際上并不是那么困難。

(另外,這個排名是 4 月 13 號的,我的排名現(xiàn)在很有可能已經(jīng)下降了…)

我學(xué)到了什么

這個項(xiàng)目很簡單,你在解決任務(wù)的過程中也不會遇到什么奇怪的挑戰(zhàn),所以這個項(xiàng)目非常適合入門。

并且由于已經(jīng)有很多人得滿分了,我覺得主辦方應(yīng)該另外創(chuàng)建一個用于提交的測試集,難度最好更高一點(diǎn)。

不管怎么樣,從這個項(xiàng)目開始基本沒有什么困難。你可以馬上嘗試并且獲得高分。

[[267340]]

圖源:Mario Mrad on Unsplash

卷積神經(jīng)網(wǎng)絡(luò)對各種不同的任務(wù)都很有效,不論是圖像識別還是圖像生成?,F(xiàn)在分析圖像并不像以前那么難。當(dāng)然,如果你嘗試的話也可以做到。

所以,選擇一個好的卷積神經(jīng)網(wǎng)絡(luò)項(xiàng)目,準(zhǔn)備好高質(zhì)量的數(shù)據(jù),開始吧!

原文鏈接:

https://medium.freecodecamp.org/everything-you-need-to-know-to-master-convolutional-neural-networks-ef98ca3c7655

【本文是51CTO專欄機(jī)構(gòu)“機(jī)器之心”的原創(chuàng)譯文,微信公眾號“機(jī)器之心( id: almosthuman2014)”】 

戳這里,看該作者更多好文

責(zé)任編輯:趙寧寧 來源: 51CTO專欄
相關(guān)推薦

2017-05-04 18:30:34

大數(shù)據(jù)卷積神經(jīng)網(wǎng)絡(luò)

2022-04-07 09:01:52

神經(jīng)網(wǎng)絡(luò)人工智能

2019-01-05 08:40:17

VGG神經(jīng)網(wǎng)絡(luò)

2022-10-11 23:35:28

神經(jīng)網(wǎng)絡(luò)VGGNetAlexNet

2017-09-08 13:30:32

深度學(xué)習(xí)圖像識別卷積神經(jīng)網(wǎng)絡(luò)

2018-04-08 11:20:43

深度學(xué)習(xí)

2020-03-25 09:48:10

AI芯片神經(jīng)網(wǎng)絡(luò)

2024-10-28 00:38:10

2024-11-15 13:20:02

2017-04-26 09:30:53

卷積神經(jīng)網(wǎng)絡(luò)實(shí)戰(zhàn)

2025-02-21 08:29:07

2024-09-20 07:36:12

2017-11-24 11:10:39

神經(jīng)網(wǎng)絡(luò)卷積神經(jīng)網(wǎng)絡(luò)全連接神經(jīng)網(wǎng)絡(luò)

2021-06-29 09:53:06

神經(jīng)網(wǎng)絡(luò)數(shù)據(jù)圖形

2024-10-05 23:00:35

2022-06-16 10:29:33

神經(jīng)網(wǎng)絡(luò)圖像分類算法

2018-08-27 17:05:48

tensorflow神經(jīng)網(wǎng)絡(luò)圖像處理

2024-11-11 00:00:02

卷積神經(jīng)網(wǎng)絡(luò)算法

2024-12-04 10:33:17

2017-05-03 08:52:13

卷積神經(jīng)網(wǎng)絡(luò)神經(jīng)網(wǎng)絡(luò)非線性激活函數(shù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號