ニューラルネットワークのいくつかの簡単な流れの理解(訓練セット、テストセット、検証セット(残留法とK折り返し交差検証))

5665 ワード

実は以前は学習が散在していたので、訓練セット、検証セット、テストセットには特に区別がありませんでした.このような時間は以前の基礎の上でやはりいくつかのもの(すべてとても簡単なものですが)を学んだので、しかし私はやはり書きましょう万一私が忘れたならば.ハハハ!

トレーニングセット


実は私たちが訓練データを手に入れたとき、私たちはデータを2つの部分に分けて、訓練セットはその中の1つです.名前の通り、私たちのネットワークウェイト(weight)とバイアス(bias)を訓練するために訓練セットが必要です.私たちのすべてのパラメータの更新は誤差によって更新されます.この誤差は私たちが定義した損失関数で、よく見られる損失関数には平均分散(回帰問題)、クロスエントロピー(分類問題)などがあります.私たちのネットワークは一連の行列乗算によって前方に伝播し、実際の値と比較した後、損失関数により誤差を得た.誤差が発生すると、重みを更新しなければなりません.重みを更新する方法は、最適化方法と呼ばれ、勾配の低下などの最適化方法が一般的です.トレーニングセットの主な目的は、これらの重みなどのパラメータを更新することです.

検証セット


その実験的証明セットは訓練セットの一部であり,これはネットワーク訓練が完了した後,超パラメータを調整するために用いたデータセットである.スーパーパラメータとは,ネットワークの構造と学習方式を決定するいくつかのパラメータであり,ネットワークの学習率,最適化関数,ネットワークの層数,隠蔽層の個数などである.テストセットを使用してパラメータを調整しない理由は、テストセットのデータが未知である必要があることを理解します.ネットワークの汎化能力を最大化するために、テストセットのデータを少しも漏らすことはできません.ネットワークがテストセットで訓練された後、ネットワークにとってこのデータセットはもう未知ではありません.私たちのネットワークの汎化エネルギー力をよりよく説明することはできません.したがって、これが検証セットの意味です.一般的なアルゴリズムには,残留法とK折交差検証がある.
留置法
#  
import numpy as np
import keras
line = 10000
np.random.shuffle(data) # 
validation_data = data[:10000]
train_data = data[:]

model=get_model()
model.train(train_data)
validation_score = model.evaluate(validation_data)
# , 。

K折交差検証
# K 。
k = 4 # 
number = len(data) // k # K
np.random.shuffle(data)
validation_score=[]
for fold in range(k):
    validation_data = data[fold*number:(fold+1)*number]
    train_data = np.concatenate(data[:fold*number],data[(fold+1)*number:]) # 
    
    model = C_model()
    model.train(train_data)
    validation_score = model.evaluate(train_data)
    validation_scores.append(validation_score)
    
validation_score = np.average(validation_scores) # loss 。

もちろんもう一つの方法はK折り返しクロス検証と呼ばれていますが、個人的にはK折り返しの基礎に大きなループをコートし、大きなループの中でデータを乱すたびにデータを乱すと思います.

テストセット


これは、私たちのネットワークが実際のデータに遭遇したときの状況をシミュレートし、いくつかの評価関数を探して、私たちのネットワークの汎化能力を評価することができます.正確率とか、他とか.