keras tuner 細節

搜尋較優的網路架構

前篇的範例只有在確定網路要用多少層, 再利用 keras tuner 幫忙搜尋到每一層較優的神經元數. 要是我們連要多少層的網路, 也不 知道每一捲積層要不要 Pooling? 也不知道層與層之間要不要 dropout (也不知道要dropout多少%神經元?)? 那要如何利用 keras tuner設計呢?

我們先嘗試一個簡單的網路, 假設已知最多需要五層的全連結層, 但是我們不知道實際是 5, 或者 4, 又或者 3 層才是比較符合需求的網路架構, 我們假設這個層數是變量 num_layers, 那我們只需要用 for loop 來嘗試 range(1,6), 1 到 5層看看即可. 不過我們可不希望每一層都用很單調的相同神經元數量, 我們希望找到每層各自較優的神經元數:

units=hp.Int(f"units_{i}", min_value=32, max_value=512, step=32)

這樣第 i 層 就會嘗試 f"units_{i}" 這個變量的神經元數

這麼龐大的全連接層網路, 我們擔心會發生過擬和 overfitting, 最常看到的是加上dropout 層.

假設我們要 tuner 幫忙決定在每個 Dense 全連接層都試試看是否增加 dropout 層, 而且我們希望試試看 dropout 的比例從 0.2, 0.35, 到0.65. 我們只要多加 一個條件 if hp.Boolean 來決定是否加入 layers.Dropout 層.

注意: f"dropout_{i}", f"drpoutRate_{i}" 是為了讓每一層都可以自行決定要不要添加一層與 各自獨立的 dropout rate.

以上我們簡略的完成讓 keras_tuner 幫忙搜尋到到底要多少層的 Dense Layer, 每層是否要加上 dropout (dropout rate也需要於0.2-0.65 之間搜尋較優值)