1. 程式人生 > >fast.ai 深度學習筆記:第一部分第一課

fast.ai 深度學習筆記:第一部分第一課

原文:Deep Learning 2: Part 1 Lesson 1

作者:Hiromi Suenaga

入門 [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'] 
  • 此資料夾結構是共享和提供影象分類資料集的最常用方法。 每個資料夾都會告訴你標籤(例如dogscats)。
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]
  • 很多人都認為深度學習需要大量的時間,大量的資源和大量的資料 - 一般來說,這不是真的!

閱讀更多