私はケラスが初めてで、あなたの助けが必要です。
私はケラスでニューラルネットをトレーニングしており、損失関数は二乗差b / wネットの出力とターゲット値です。
勾配降下法を使用してこれを最適化したいと思います。ネット上のリンクをたどると、一般的に使用される3種類の勾配降下法があることがわかりました。
- 単一サンプル勾配降下:ここで、勾配は反復ごとに1つのサンプルのみから計算されます->勾配はノイズが多い場合があります。
- バッチ勾配降下:ここで、勾配はデータセット内のすべてのサンプルから計算された勾配の平均です->勾配はより一般的ですが、巨大なデータセットには扱いにくいです。
- ミニバッチ勾配降下:バッチGDに似ています。データセット全体を使用する代わりに、いくつかのサンプル(batch_sizeによって決定される)のみを使用して、すべての反復で勾配を計算します->あまりノイズが多くなく、計算上扱いにくい->両方の長所。
質問:
- ケラスでミニバッチ勾配降下法を実行したいと思います。これどうやってするの?SGDオプティマイザーを使用する必要がありますか?
SGDを使用する場合、batch_sizeを設定するにはどうすればよいですか?batch_sizeを設定するためのSGD関数のパラメーターがないようです。
optimizer = keras.optimizers.SGD(lr=0.01, decay=0.1, momentum=0.1, nesterov=False)
Kerasのmodel.fit()にbatch_sizeパラメータがあります。
history = model.fit(x, y, nb_epoch=num_epochs, batch_size=20, verbose=0, validation_split=0.1)
これはミニバッチ勾配降下法のバッチサイズと同じですか?そうでない場合、入力のバッチでトレーニングするとはどういう意味ですか?「batch_size」という意味ではありませんか。のスレッドが並列に実行され、モデルの重みを並列に更新しますか?
それが役立つ場合は、これまでに書いたpythonコードスニペットを次に示します。