神經網絡中,除了權重和偏置,超參數(hyper-parameter)也經常出現,這裡所說的超參數是指:
- 神經元數量
- batch大小
- 參數更新時的學習率或權值衰減
在決定超參數的過程中,一般會伴隨很多的試錯
調整超參數時,必須使用超參數專用的確認數據。根據不同的數據集,有的會事先分成訓練數據,驗證數據,測試數據三部分。
<aside> 💡 不可以使用測試資料來評估超參數的效能! ⇒ 超參數會對測試資料過度學習
</aside>
分割數據程式碼如下:
(x_train, t_train), (x_test, t_test) = load_mnist(normalize=True)
# 分割验证数据
validation_rate = 0.20
validation_num = x_train.shape[0] * validation_rate
x_train, t_train = shuffle_dataset(x_train, t_train)
x_val = x_train[:validation_num]
t_val = t_train[:validation_num]
x_train = x_train[validation_num:]
t_train = t_train[validation_num:]
上面用到了shuffle_dataset 用於打亂數據:
def shuffle_dataset(x, t):
"""打乱数据集
Parameters
----------
x : 训练数据
t : 监督数据
Returns
-------
x, t : 打乱的训练数据和监督数据
"""
permutation = np.random.permutation(x.shape[0])
x = x[permutation,:] if x.ndim == 2 else x[permutation,:,:,:]
t = t[permutation]
return x, t