初探深度學習使用 Keras part1
延伸閱讀: Keras文檔
- Keras文檔的來源位於此目錄中。我們的文檔使用由MkDocs實現的擴展Markdown 。
- 構建文檔 安裝MkDocs: pip install mkdocs
- pip install -e . 確保Python將導入您修改後的Keras版本。
- 從根目錄cd進入docs/文件夾並運行:
- KERAS_BACKEND=tensorflow python autogen.py
- mkdocs serve #啟動本地Web服務器: localhost:8000
- mkdocs build #在site/目錄中構建靜態站點
- KERAS_BACKEND=tensorflow python autogen.py
- mkdocs serve #啟動本地Web服務器: localhost:8000
- mkdocs build #在site/目錄中構建靜態站點
Keras: 中文文檔
延伸閱讀
- Keras: The Python Deep Learning library
- Keras dataset
- Predicting Boston House Prices
其餘公開數據集介紹
Imagenet
Imagenet數據集有1400多萬幅圖片,涵蓋2萬多個類別;其中有超過百萬的圖片有明確的類別標註和圖像中物體位置的標註,具體信息如下:
1)Total number of non-empty synsets : 21841
2)Total number of images: 14,197,122
3)Number of images with bounding box annotations: 1,034,908
4)Number of synsets with SIFT features: 1000
5)Number of images with SIFT features: 1.2 million
Imagenet數據集是目前深度學習圖像領域應用得非常多的一個領域,關於圖像分類、定位、檢測等研究工作大多基於此數據集展開。Imagenet數據集文檔詳細,有專門的團隊維護,使用非常方便,在計算機視覺領域研究論文中應用非常廣,幾乎成為了目前深度學習圖像領域算法性能檢驗的“標準”數據集。數據集大小:~1TB(ILSVRC2016比賽全部數據) 下載地址: http://www.image-net.org/about-stats
COCO
COCO(Common Objects in Context)是一個新的圖像識別、分割和圖像語義數據集,它有如下特點:
1)Object segmentation
2)Recognition in Context
3)Multiple objects per image
4)More than 300,000 images
5)More than 2 Million instances
6)80 object categories
7)5 captions per image
8)Keypoints on 100,000 people
COCO數據集由微軟贊助,其對於圖像的標註信息不僅有類別、位置信息,還有對圖像的語義文本描述,COCO數據集的開源使得近兩三年來圖像分割語義理解取得了巨大的進展,也幾乎成為了圖像語義理解算法性能評價的“標準”數據集。
Google開源的開源了圖說生成模型show and tell就是在此數據集上測試的,想玩的可以下下來試試。數據集大小:~40GB 下載地址:http://mscoco.org/
延伸閱讀
Getting started with the Keras Sequential model
模型編譯
在訓練模型之前,您需要配置學習過程,的英文這通過compile方法完成的它接收三個參數:
•優化器optimizer。它可以是現有優化器的字符串標識符,如rmsprop或adagrad,也可以是Optimizer類的實例。
•損失函數的損失,模型試圖最小化的目標函數它可以是現有損失函數的字符串標識符,如。categorical_crossentropy或mse,也可以是一個目標函數
•評估標準指標。對於任何分類問題,你都希望將其設置為metrics = ['accuracy']。評估標準可以是現有的標準的字符串標識符,也可以是自定義的評估標準函數。
Getting started with the Keras functional API
層「節點」的概念
每當你在某個輸入上調用一個層時,都將創建一個新的張量(層的輸出),並且為該層添加一個「節點」,將輸入張量連接到輸出張量。當多次調用同一個圖層時,該圖層將擁有多個節點索引(0, 1, 2...)。
但是如果一個層與多個輸入連接呢?
- 只要一個層僅僅連接到一個輸入,就不會有困惑,.output會返回層的唯一輸出
機器學習 - 神經網路 (多層感知機 Multilayer perceptron, MLP) 運作方式
文章連結:Medium shorturl.at/oH234
多層感知機
TensorFlow筆記-06-神經網絡優化-損失函數,自定義損失函數,交叉熵
使用損失函數
在經典的人工神經網路解釋中,隱藏層中的所有神經元最初都是被啟動的,為了完成某一特定任務,有必要關閉其中的一些神經元,即有必要「遺忘」所有不必要信息。在人工神經網路中,啟動是指神經元在評估中參與正向傳播,在訓練中參與反向傳播。
- 神經網路常用啟動函數總結
- Reference 激活函數的圖示及其一階導數
- 知乎 - Tensorflow中learning rate decay的技巧
- 機器/深度學習-基礎數學(二):梯度下降法(gradient descent)
延伸閱讀– 如何設定學習率的衰減
- exponential_decay :指數衰減
decayed_learning_rate = learning_rate * decay_rate ^ (global_step / decay_steps)
- natural_exp_decay :自然指數衰減
decayed_learning_rate = learning_rate * exp(-decay_rate * global_step)
- inverse_time_decay :逆時間衰減
decayed_learning_rate = learning_rate / (1 + decay_rate * global_step / decay_step)
- polynomial_decay :多項式衰減
global_step = min(global_step, decay_steps) decayed_learning_rate = (learning_rate -
end_learning_rate) *(1 - global_step / decay_steps) ^ (power) + end_learning_rate
- 機器學習-梯度下降法
- gradient descent using python and numpy
- 梯度下降算法的參數更新公式
推薦閱讀
延伸閱讀
An overview of gradient descent optimization algorithms
在很多機器學習和深度學習的應用中,我們發現用的最多的優化器是Adam,為什麼呢?
下面是TensorFlow中的優化器,https://www.tensorflow.org/api_guides/python/train
在keras中也有SGD,RMSprop,Adagrad,Adadelta,Adam等:https://keras.io/optimizers/
我們可以發現除了常見的梯度下降,還有Adadelta,Adagrad,RMSProp 等幾種優化器,都是什麼呢,又該怎麼選擇呢?https://blog.csdn.net/qq_35860352/article/details/80772142
Sebastian Ruder的這篇論文中給出了常用優化器的比較 https://arxiv.org/pdf/1609.04747.pdf
延伸閱讀:優化器是編譯Keras模型所需的兩個參數之一
from keras import optimizers
model = Sequential() model.add(Dense(64, kernel_initializer='uniform', input_shape=(10,)))
model.add(Activation('softmax’))
sgd = optimizers.SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='mean_squared_error', optimizer=sgd)
您可以在傳遞優化器之前將其實例化model.compile(),如上例所示,或者您可以通過其名稱來調用它。
在後一種情況下,將使用優化程序的默認參數。
# pass optimizer by name: default parameters will be used
model.compile(loss='mean_squared_error', optimizer='sgd')
所有Keras優化器通用的參數
的參數clipnorm和clipvalue可以與所有優化可以用來控制限幅梯度
延伸閱讀:二階優化算法
二階優化算法使用了二階導數(也叫做Hessian方法 )來最小化或最大化損失函數。由於二階導數的計算成本很高,所以這種方法並沒有廣泛使用。
延伸閱讀:自適應的算法
如果需要更快的收斂,或者是訓練更深更複雜的神經網絡,需要用一種自適應的算法。
EliteDataScience - 如何減少 Overfitting 的發生
- 使用 K-fold cross validation
- 找到一組參數可以在多組不同的 validation 上得到相似的結果
- 使用更多的訓練資料
- 減少 Features (參數) 的使用量
- 避免參數比潛在組合更多的狀況發生,以免模型靠硬記就可以得到結果
- 在模型訓練的過程中加入正則化參數 (Regularization)
- 控制 input 的改變對模型造成的影響太大。
參考資料連結:
如何 Debugging 1/2
- 檢查程式碼
- 養成好的程式撰寫習慣 (PEP8)
- 確認參數設定
- 欲實作的模型是否合適當前的資料
- 確認資料結構
- 資料是否足夠
- 是否乾淨
- 是否有適當的前處理
如何 Debugging 2/2
- 以簡單的方式實現想法
- 建立評估機制
- 開始循環測試 (evaluate - tuning - debugging)
參考連結:
知乎 - 深度學習超參數 Learning rate 與 Momentum 理解
- Learning rate:每次修正的幅度,太大則無法收斂,太小則修正過慢
- Weight decay:增加正則用以避免 overfitting
- Momentum:在修正方向上,增加動量,如牛頓定律一樣,增加動量有機會讓卡在局部最小值的狀態跳離
- Learning rate decay:讓Learning rate 可以隨訓練進行慢慢減小,讓收斂狀態趨於穩
參考連結:
- Estimating an Optimal Learning Rate For a Deep Neural Network
- cs231n: learning and evaluation
- 知乎-深度學習超參數簡單理解>>>>>>learning rate,weight decay 和 momentum
CSDN - 常見優化器方法總結:
- SGD (mini-batch)
- 在單步更新與全局更新的折衷辦法,通常搭配 momentum 穩定收斂方向與結果。
- 收斂速度較慢。
- RMSprop
- 學習率的調整是根據過去梯度的狀況調整,收斂速度快又不易會出現 learning rate 快速下降的狀況。
- Adam
- 同樣是可以根據過去的梯度自行調整 learning rate,但校正方式考量一、二階矩陣,使其更加平穩。
在實作過程中,建議先使用 Adam 驗證,若要做最終的優化,則再改用 SGD 找到最佳參數。
參考連結:
留言
張貼留言
歡迎留言一起討論