fast.ai 深度學習筆記:第一部分第一課
阿新 • • 發佈:2018-11-11
入門 [0:00]:
- 為了訓練神經網路,你肯定需要圖形處理單元(GPU) - 特別是 NVIDIA GPU,因為它是唯一支援 CUDA(幾乎所有深度學習庫和從業者都使用的語言和框架)的裝置。
- 租用 GPU 有幾種方法:Crestle [04:06] ,Paperspace [06:10]
Jupyter 筆記本和貓狗識別的介紹 [12:39]
- 你可以通過選擇它並按下
shift+enter
來執行單元格(你可以按住shift
並多次按enter
- Fast.ai 需要 Python 3
%reload_ext autoreload
%autoreload 2
%matplotlib inline
# This file contains all the main external libs we'll use
from fastai.imports import *
from fastai.transforms import *
from fastai.conv_learner import *
from fastai.model import * from fastai.dataset import * from fastai.sgdr import * from fastai.plots import *
PATH = "data/dogscats/"
sz=224
先看圖片 [15:39]
!ls {PATH}
models sample test1 tmp train valid
!
表明使用 bash(shell)而不是 python- 如果你不熟悉訓練集和驗證集,請檢視 Practical Machine Learning 課程(或閱讀 Rachel 的部落格)
!ls {PATH}valid
cats dogs
files = !ls {PATH}valid/cats | head files
['cat.10016.jpg', 'cat.1001.jpg', 'cat.10026.jpg', 'cat.10048.jpg', 'cat.10050.jpg', 'cat.10064.jpg', 'cat.10071.jpg', 'cat.10091.jpg', 'cat.10103.jpg', 'cat.10104.jpg']
- 此資料夾結構是共享和提供影象分類資料集的最常用方法。 每個資料夾都會告訴你標籤(例如
dogs
或cats
)。
img = plt.imread(f' {PATH} valid/cats/ {files[0]} ') plt.imshow(img);
image
f'{PATH}valid/cats/{files[0]}'
- 這是一個 Python 3.6 格式化字串,可以方便地格式化字串。
img.shape
(198, 179, 3)
img[:4,:4]
array([[[ 29, 20, 23], [ 31, 22, 25], [ 34, 25, 28], [ 37, 28, 31]],
[[ 60, 51, 54], [ 58, 49, 52], [ 56, 47, 50], [ 55, 46, 49]],
[[ 93, 84, 87], [ 89, 80, 83], [ 85, 76, 79], [ 81, 72, 75]],
[[104, 95, 98], [103, 94, 97], [102, 93, 96], [102, 93, 96]]], dtype=uint8)
img
是一個三維陣列(又名 3 維張量)- 這三個維度(例如
[29, 20, 23]
)表示 0 到 255 之間的紅綠藍畫素值 - 我們的想法是利用這些數字來預測這些數字是代表貓還是狗,基於檢視貓和狗的大量圖片。
- 這個資料集來自 Kaggle 競賽,當它釋出時(早在 2013 年),最先進的技術準確率為 80%。
讓我們訓練一個模型 [20:21]
以下是訓練模型所需的三行程式碼:
data = ImageClassifierData.from_paths(PATH, tfms=tfms_from_model(resnet34, sz))
learn = ConvLearner.pretrained(resnet34, data, precompute= True )
learn.fit (0.01, 3)
[ 0. 0.04955 0.02605 0.98975] [ 1. 0.03977 0.02916 0.99219] [ 2. 0.03372 0.02929 0.98975]
- 這將執行 3 個迭代,這意味著它將三次檢視整個影象集。
- 輸出中的三個數字中的最後一個是驗證集上的準確度。
- 前兩個是訓練集和驗證集的損失函式值(在這種情況下是交叉熵損失)。
- 開始(例如,
1.
)是迭代數。 - 我們通過 3 行程式碼在 17 秒內達到了 ~99% (這將在 2013 年贏得 Kaggle 比賽)![21:49]
- 很多人都認為深度學習需要大量的時間,大量的資源和大量的資料 - 一般來說,這不是真的!