情報詳細Q:HALCON ディープラーニングにおいて、ビット単位での結果の再現性を得ることは可能ですか?トレーニング時にLossが異なったり、推論結果が実行毎に異なることを避けることが目的です。A:いくつかの条件を満たせば、可能です。ただし、前提として、ビット単位の再現性の確保はニューラル ネットワークのトレーニングにおいてあまり価値のないものであることをご承知ください。トレーニングの多くの側面は、次の要素によって、その動作においてすでに確率論的であるためです。 データセットの分割 (学習用/検証用/評価用)SGD (確率的勾配降下法:学習時に使用される最適化手法)バッチ選択 ビット単位の再現性の保証はつまり、これらの確率要素を全て固定することになりますが、そうして得られたネットワークが最良であるとは限りません。また、優れたモデルを得るための一貫したトレーニング手法はほかにもあります。例えば、いくつかの異なるシード値で学習を実行し、固定の評価用データセットを使用して、最良のモデルを選択することです。しかし、この方法であっても、評価用データセットの選択自体が確率的なものであるため、のちにモデルが直面する実世界のデータを表現していることは保証されていません。そのため、ニューラルネットワーク手法そのものが確率的性質を持つことを認識し、1つの「再現可能な」トレーニング結果を使用することに集中すべきではありません。再現性に拘って「まぐれ当たり」のモデルを求めるのではなく、再現性が確保されない環境下で、安定した評価精度が得られるパラメータ・データセットを模索することが建設的な方針と言えるでしょう。さて、上記を踏まえたうえで、学習時・推論それぞれで再現性が得られるべき条件は次の通りです。 (GPU)または(CPU) と記載のある項目は、その実行デバイスでのみ条件が適用されます。学習時 データセットが同一であること乱数シード値が固定されていることトレーニングに使用するハードウェアが同一であること GPUの場合、完全に同じハードウェアであることがベストですが、アーキテクチャが同じ世代であれば基本的に問題ありません トレーニングに使用するOS・アーキテクチャが同一であることHALCONバージョンが同一であることcuDNN/CUDAライブラリバージョンが同一であること (GPU)GPUのドライババージョンが同一であること (GPU)set_system('cudnn_deterministic', 'true') が実行されていること (GPU) 実行速度の低下・メモリ使用量の増加の可能性があります詳細なcudnn_deterministicの作用はナレッジ000007033を参照してください 使用するスレッド数とSIMDオプションが同じであること (CPU) 最大スレッド数が異なるとSIMD演算の結果が異なる可能性があります。同様に、有効化されているSIMDオプションに差異があると、演算結果に違いが生じる可能性があります。 学習対象のモデルがインスタンスセグメンテーションでないこと (GPU) 推論時 実行するハードウェアが同一であること (GPU:アーキテクチャが同じ世代であること)実行環境のOS・アーキテクチャが同一であることHALCONバージョンが同一であることGPUのドライババージョンが同一であること (GPU)cuDNN/CUDAライブラリバージョンが同一であること (GPU)使用するスレッド数とSIMDオプションが同じであること (CPU)入力する画像が同一であること使用するモデルファイルが浮動小数点精度を含めて同じであることset_system('cudnn_deterministic', 'true') が実行されていること (GPU) (画像分類でgen_dl_model_heatmapを使用する場合) 経験的には、たとえ再現性が確保されていなくとも、Well-trainedなモデルではIoUやMeanAPといった評価尺度に大きな差が生じることはありません。再現性に関する種々の条件を踏まえると、「本番で」推論を行うデバイス上で、用意した精度検証用データセットを使用して評価することが最も望ましい検証方法であると結論付けられます。添付ファイルタイトルディープラーニングの再現性についてURL 名000010858公開状況公開済み検証状況公開済み