私は、サイズ(21760, 1, 33, 33)
のhdf5トレーニングデータセットを持っています。 21760
はトレーニングサンプルの全数です。私はネットワークを訓練するために、サイズ128
のミニバッチ訓練データを使用したいと思います。トレーニングのための1つのhdf5データファイルでバッチを読み取る方法は?
私が聞きたい:
をtensorflowたびにデータセット全体から128
ミニバッチ学習データを供給するためにどのように?
私は、サイズ(21760, 1, 33, 33)
のhdf5トレーニングデータセットを持っています。 21760
はトレーニングサンプルの全数です。私はネットワークを訓練するために、サイズ128
のミニバッチ訓練データを使用したいと思います。トレーニングのための1つのhdf5データファイルでバッチを読み取る方法は?
私が聞きたい:
をtensorflowたびにデータセット全体から128
ミニバッチ学習データを供給するためにどのように?
hdf5データセットをnumpy配列に読み込み、numpy配列のスライスをTensorFlowモデルに送ることができます。次のような擬似コードは動作します:
import numpy, h5py
f = h5py.File('somefile.h5','r')
data = f.get('path/to/my/dataset')
data_as_array = numpy.array(data)
for i in range(0, 21760, 128):
sess.run(train_op, feed_dict={input:data_as_array[i:i+128, :, :, :]})
あなたのデータセットがkevemanが提案のように、それはメモリにインポートすることができないほど大きい場合、あなたは直接h5pyオブジェクトを使用することができます。
import h5py
import tensorflow as tf
data = h5py.File('myfile.h5py', 'r')
data_size = data['data_set'].shape[0]
batch_size = 128
sess = tf.Session()
train_op = # tf.something_useful()
input = # tf.placeholder or something
for i in range(0, data_size, batch_size):
current_data = data['data_set'][position:position+batch_size]
sess.run(train_op, feed_dict={input: current_data})
をまた、繰り返しの膨大な数を介して実行し、ランダムにあなたがしたい場合はバッチを選択することができます。
import random
for i in range(iterations):
pos = random.randint(0, int(data_size/batch_size)-1) * batch_size
current_data = data['data_set'][pos:pos+batch_size]
sess.run(train_op, feed_dict={inputs=current_data})
または逐次:
for i in range(iterations):
pos = (i % int(data_size/batch_size)) * batch_size
current_data = data['data_set'][pos:pos+batch_size]
sess.run(train_op, feed_dict={inputs=current_data})
すべてのデータをランダムに処理するより洗練されたコードを作成したいが、どのバッチが使用されたかを把握しているので、他のバッチより頻繁にバッチを使用することはない。トレーニングセットをフル実行したら、すべてのバッチを再度有効にして繰り返します。
ありがとうございます。しかし、トレーニング反復回数iが大きい場合、例えば、 100000、どのようにそれを食べる? –
トレーニングサンプルが「21760」しかない場合は、「21760/128」のミニバッチがあります。 'i'ループの周りに外側ループを記述し、トレーニングデータセットの上で多くのエポックを実行する必要があります。 – keveman
私は1つの点が混乱しています。元のデータをシャッフルしてミニバッチを抽出すると、ミニバッチの数が「21760/128」を超えていることを意味しますか? –