医療画像アプリケーションでは、TensorFlowでCNNをトレーニングしています。各繰り返し(TensorFlow)後に処理時間が長くなります。
私は大量のデータを持っていないので、トレーニングループ中にトレーニングバッチに無作為に修正を加えてトレーニングデータセットを人工的に増やそうとしています。私は別のスクリプトで次の機能を作成し、トレーニングバッチで呼び出しました。
def randomly_modify_training_batch(images_train_batch, batch_size):
for i in range(batch_size):
image = images_train_batch[i]
image_tensor = tf.convert_to_tensor(image)
distorted_image = tf.image.random_flip_left_right(image_tensor)
distorted_image = tf.image.random_flip_up_down(distorted_image)
distorted_image = tf.image.random_brightness(distorted_image, max_delta=60)
distorted_image = tf.image.random_contrast(distorted_image, lower=0.2, upper=1.8)
with tf.Session():
images_train_batch[i] = distorted_image.eval() # .eval() is used to reconvert the image from Tensor type to ndarray
return images_train_batch
コードは自分の画像に変更を加えるのに適しています。
問題がある:私のトレーニングループ(フィードフォワード+バックプロパゲーション)の各反復後
、着実に前回より5秒長い時間がかかります私の次の研修バッチにこれと同じ機能を適用します。
10回以上の反復処理後に処理に1秒かかり、処理に1分以上かかります。
この原因は何ですか? どうすればそれを防ぐことができますか?
(私は "distorted_image.eval()"と思っていますが、わかりません。毎回新しいセッションを開いていますか?TensorFlowは、 "with tf" .Session() "ブロック?)
[TensorFlow:入力時のグラデーションを取得するときのパフォーマンスが遅くなる可能性があります。](0120-338-501) – etarion