私はテンソルフローで非常に遅いバッチロードに問題があります。 トレーニングの各ステップはかなり速いですが、データを読み込む機能は非常に遅いです。テンソルフローのバッチのロードを最適化するにはどうすればよいですか?
列車操作が実行されているときに、この手順をバックグラウンドで実行する方法があるかどうか疑問に思っていたので、1つの手順が完了するまでにバッチを準備できるようになりました。
私の機能はnumpy配列で保存されています。
すべてのアイデア? これは私のコードです。
def test_loadbatch(no_timesteps,list_of_file_paths,batch_size):
nof=no_timesteps# No of combined
files=list_of_file_paths
files=shuffle_list(files)
classes=get_class_number(files)
temp_batch=np.zeros(shape=(batch_size,no_timesteps,4096),dtype=np.float32)
temp_classes=np.zeros(shape=(batch_size,101),dtype=np.float32)
bat_num=0
fileno=0
while bat_num != batch_size :
if os.path.isfile(str(files[fileno])):
val=np.load(str(files[fileno]))
try:
if val.shape[0]>no_timesteps+2:
num=random.randint(0,val.shape[0]-(no_timesteps+2))
temp_batch[bat_num,:,:]=val[num:num+nof,:]
temp_classes[bat_num,:]=create_one_hot(classes[fileno])
bat_num=bat_num+1
except Exception as ex:
fileno=fileno+1
fileno=fileno+1
return np.maximum(np.tanh(temp_batch), 0),temp_classes #normalize in range 0->1
cProfileで実行して、snakevizを使って時間が費やされる場所を確認できますか? –
素敵なアイデア..ディスクからファイルを読み込む場所がnpyioに費やされているようです。私はこれをどうやって減らすことができますか?FIFOqueueを見て、何かを実装できるかどうかを見てください。 –