1

Keras に実装したフィード フォワード ニューラル ネットワークへの入力については、自分の理解が正しいことを確認したかっただけです。

[[ 25.26000023  26.37000084  24.67000008  23.30999947]
[ 26.37000084  24.67000008  23.30999947  21.36000061]
[ 24.67000008  23.30999947  21.36000061  19.77000046]...]

したがって、上記のデータでは、配列内の 4 つの入力のタイム ウィンドウです。私の入力層は

model.add(Dense(4, input_dim=4, activation='sigmoid')) 

model.fit(trainX, trainY, nb_epoch=10000,verbose=2,batch_size=4)

batch_size は 4 です。理論的には、fit 関数を呼び出すと、関数は各 nb_epoch でこれらすべての入力を処理しますか? この時間枠が機能するには、batch_size を 4 にする必要がありますか?

ありがとうジョン

4

2 に答える 2

1

batch_size は 4 です。理論的には、fit 関数を呼び出すと、関数は各 nb_epoch でこれらすべての入力を処理しますか?

はい、各エポックはすべてのトレーニング サンプルの反復です

この時間枠が機能するには、batch_size を 4 にする必要がありますか?

いいえ、これらはまったく関係のないことです。バッチは、コスト関数の真の勾配の近似を計算するために使用されるトレーニング データの単なるサブセットです。バッチを大きくすると、真の勾配 (および元のGradient Descent ) に近づきますが、トレーニングは遅くなります。1 に近づくと、ますます確率的でノイズの多い近似になります (そして、確率的勾配降下に近づきます)。batch_size とデータの次元を一致させたという事実は単なる偶然の一致であり、意味がありません。

これをより一般的な設定にしましょう。加法的損失関数(ニューラルネットが通常使用する)を使用した勾配降下で行うことは、次の勾配に逆らっています。

grad_theta 1/N SUM_i=1^N loss(x_i, pred(x_i), y_i|theta) =  
 = 1/N SUM_i=1^N grad_theta loss(x_i, pred(x_i), y_i|theta)

と比較した場合の (予測)lossに対する損失関数はどこにありますか。predy_i

そして、バッチベースのシナリオ(大まかなアイデア)では、すべての例を調べる必要はありませんが、代わりにbatch = {(x_1, y_1), (x_5, y_5), (x_89, y_89) ... }、フォームの勾配の近似を使用するなど、いくつかの厳密なサブセットを使用する必要があります

1/|batch| SUM_(x_i, y_i) in batch: grad_theta loss(x_i, pred(x_i), y_i|theta)

ご覧のとおり、これはx_iライブの空間とはまったく関係がないため、データの次元とは関係ありません。

于 2016-09-08T17:48:01.563 に答える
1

これを例で説明しましょう。

32 個のトレーニング サンプルがありmodel.fit 、a batch_sizeof 4 で呼び出す場合、ニューラル ネットワークには一度に 4 つのサンプルが表示されますが、1 つのエポックは 32 個のサンプルすべてに対する 1 つの完全なパスとして定義されます。したがって、この場合、ネットワークは一度に 4 つの例を通過し、少なくとも理論的には、フォワード パス (およびバックワード パス) を 32 / 4 = 8 回呼び出します。

your が 1 の極端な場合batch_size、それは昔ながらの確率的勾配降下法です。あなたbatch_sizeが 1 より大きい場合、それはバッチ勾配降下法と呼ばれます。

于 2016-09-08T16:51:17.847 に答える