0

Python のログ モジュールによって書き込まれた最後のメッセージを置換または削除する方法を探しています。目標は、変数の変更が発生したらログに記録することです。変数が再度変更された場合は、古いログ メッセージを削除し、代わりに新しいログ メッセージを出力する必要があります。

やあ、

現在取り組んでいる深層学習プロジェクトに pythons のログ モジュールを使用しています。一部の GPU では、トレーニング中にデフォルトのバッチ サイズをサポートするのに十分なメモリがなく、事前に計算に使用できるバッチ サイズと実際のメモリ使用量との間に明らかな関連性がないため、実行時エラーが発生したらキャッチして、バッチ サイズを 1 減らします。このプロセスはかなり繰り返される可能性があり、どのバッチサイズが機能しなかったか、次にどのバッチサイズが試行されるかを常にログに記録しています。これらのメッセージを 10 ~ 30 (またはそれ以上) 持つ代わりに、単純に最後のメッセージを削除して、代わりに新しいメッセージに置き換えたいと思います。

私はすでにPythonログのドキュメントをチェックアウトし、LogRecordオブジェクトに出くわしましたが、それに対処しようとすると、このオブジェクトは実際にはすべてのログの記録を保持していないようですが、代わりに1つの特定のログにさらに情報を保存しているようです.

これを行う方法がまったくない場合は、ここで説明されているように、ある種のバンドル ソリューションを検討します: Python ロギング: 繰り返し発生するメッセージをバンドルする

以下のコードは、置き換えようとしているログ メッセージを示しています。

どんな助けでも大歓迎です。

training_not_successful = True
    while training_not_successful:
        try:
            model.run_training(global_settings['epochs'],
                               train_loader,
                               test_loader,
                               global_settings['checkpoint_output_path'],
                               model_name,
                               global_settings['best_net_criterion'])
            training_not_successful = False
        except MemoryError:
            logging.warning("Ran out of CUDA memory using batch size " + str(batch_size) +
                            ". Trying again with batch size " + str(batch_size-1))
            batch_size -= 1
            train_loader, test_loader = get_train_test_loaders(
                train_dataset_list,
                test_dataset_list,
                value_counts,
                batch_size
            )
4

1 に答える 1