web-dev-qa-db-ja.com

Tensorflow Allocation Memory:38535168の割り当てがシステムメモリの10%を超えています

ResNet50の事前トレーニング済みの重みを使用して、分類子を作成しようとしています。コードベースは、Kerasの高レベルTensorflow APIに完全に実装されています。完全なコードは、以下のGitHubリンクに投稿されています。

ソースコード: RestNet50アーキテクチャを使用した分類

事前学習済みモデルのファイルサイズは94.7mbです。

事前に訓練されたファイルをロードしました

new_model = Sequential()

new_model.add(ResNet50(include_top=False,
                pooling='avg',
                weights=resnet_weight_paths))

モデルに適合

train_generator = data_generator.flow_from_directory(
    'path_to_the_training_set',
    target_size = (IMG_SIZE,IMG_SIZE),
    batch_size = 12,
    class_mode = 'categorical'
    )

validation_generator = data_generator.flow_from_directory(
    'path_to_the_validation_set',
    target_size = (IMG_SIZE,IMG_SIZE),
    class_mode = 'categorical'
    )

#compile the model

new_model.fit_generator(
    train_generator,
    steps_per_Epoch = 3,
    validation_data = validation_generator,
    validation_steps = 1
)

トレーニングデータセットには、犬と猫の2つのフォルダーがあり、各フォルダーには約10,000個の画像があります。スクリプトをコンパイルすると、次のエラーが表示されます

Epoch 1/1 2018-05-12 13:04:45.847298:W tensorflow/core/framework/allocator.cc:101] 38535168の割り当てがシステムメモリの10%を超えています。 2018-05-12 13:04:46.845021:W tensorflow/core/framework/allocator.cc:101] 37171200の割り当てがシステムメモリの10%を超えています。 2018-05-12 13:04:47.552176:W tensorflow/core/framework/allocator.cc:101] 37171200の割り当てがシステムメモリの10%を超えています。 2018-05-12 13:04:48.199240:W tensorflow/core/framework/allocator.cc:101] 37171200の割り当てがシステムメモリの10%を超えています。 2018-05-12 13:04:48.918930:W tensorflow/core/framework/allocator.cc:101] 37171200の割り当てがシステムメモリの10%を超えています。 2018-05-12 13:04:49.274137:W tensorflow/core/framework/allocator.cc:101] 19267584の割り当てがシステムメモリの10%を超えています。 2018-05-12 13:04:49.647061:W tensorflow/core/framework/allocator.cc:101] 19267584の割り当てがシステムメモリの10%を超えています。 2018-05-12 13:04:50.028839:W tensorflow/core/framework/allocator.cc:101] 19267584の割り当てがシステムメモリの10%を超えています。 2018-05-12 13:04:50.413735:W tensorflow/core/framework/allocator.cc:101] 19267584の割り当てがシステムメモリの10%を超えています。

事前トレーニング済みのモデルをロードする方法を最適化する(または)この警告メッセージを取り除くアイデアはありますか?

ありがとう!

18
Madhi

Batch_size属性を小さい数(1、2、3など)に減らしてみてください。例:

train_generator = data_generator.flow_from_directory(
    'path_to_the_training_set',
    target_size = (IMG_SIZE,IMG_SIZE),
    batch_size = 2,
    class_mode = 'categorical'
    )
8
user9804206

DockerとJupyterノートブックでTensorflowコンテナを実行しているときに同じ問題が発生していました。コンテナのメモリを増やすことで、この問題を解決できました。

Mac OSでは、次から簡単にこれを行うことができます。

       Docker Icon > Preferences >  Advanced > Memory

スクロールバーを最大(4GBなど)にドラッグします。適用すると、Dockerエンジンが再起動します。

テンソルフローコンテナを再度実行します。

別の端末でdocker statsコマンドを使用すると便利でした。コンテナメモリの使用状況をリアルタイムで表示し、メモリ消費量がどれだけ増加しているかを確認できます。

CONTAINER ID   NAME   CPU %   MEM USAGE / LIMIT     MEM %    NET I/O             BLOCK I/O           PIDS
3170c0b402cc   mytf   0.04%   588.6MiB / 3.855GiB   14.91%   13.1MB / 3.06MB     214MB / 3.13MB      21
4
revolutionary

または、環境変数TF_CPP_MIN_LOG_LEVEL=2を設定して、情報および警告メッセージを除外できます。 同じ出力について不平を言っているこのgithubの問題 でそれを見つけました。 Python内でこれを行うには、 here のソリューションを使用できます。

import os
import tensorflow as tf
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'

これで自由にオンとオフを切り替えることもできます。コードを実行する前に、可能な限り最大のバッチサイズをテストし、これを行う間は警告とエラーを無効にすることができます。

3
Poik

CPUで小さなモデルを実行していて、同じ問題がありました。追加:os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'は解決しました。

2
Ahmed J.