「設計」は,テンプレートに「部品」を埋め込んで,具体的なニューラルネットワークの構造を作る工程。
テンプレートは,つぎのようなコードでつくられた:
python
template = {
"num_layers": 6,
"layer_type": ["conv", "pool", "fc"],
"kernel_size": [3, 5, 7],
"activation": ["relu", "tanh"]
}
このテンプレートは,
6層のネットワーク
で,各層に
layer_type, kernel_size, activation
の3つの穴がある。
「穴」を意味は:
| 穴の名前 |
意味 |
選択肢(値の候補) |
| layer_type |
レイヤーの数 |
3〜10 |
| num_layers |
各レイヤーの種類 |
"conv", "pool", "fc" |
| kernel_size |
畳み込みやプーリングの カーネルサイズ |
3, 5, 7 |
| activation |
活性化関数 |
"relu", "tanh" |
コントローラは,このテンプレートの各穴に対して,順番に値を選んで埋めていく。
たとえば,RNNベースのコントローラなら,次のような流れになる:
最初のレイヤー (層1) で
layer_type を選ぶ(例:conv)
次に kernel_size を選ぶ(例:3)
次に activation を選ぶ(例:relu)
次のレイヤー (層2) に進む
(繰り返し)
このようにして,テンプレートの「穴」をすべて埋めたとき,1つの具体的なニューラルネットワークの設計図の完成となる。
穴埋めの例
| 層 |
layer_type |
kernel_size |
activation |
| 1 |
conv |
3 |
relu |
| 2 |
conv |
5 |
tanh |
| 3 |
pool |
3 |
- |
| 4 |
conv |
7 |
relu |
| 5 |
fc |
- |
relu |
| 6 |
fc |
- |
tanh |
※ pool や fc には kernel_size が不要な場合もあるので,
穴の「有効性」も条件付きになる。
|