aiaccel
aiaccel copied to clipboard
Fix the handling of None values.
ユーザプログラムが None を返した際に、エラーが出る・想定外の挙動を取る現象を修正しました。
- MOTPE 等の多目的最適化をtype: localで実行した場合、(1.0, None)のような片方の目的関数の結果がNoneだった時に、コード内では (1.0, "None") のように None が str として扱われます。(ファイル読み書きで目的関数の値を渡している都合)
- aiaccel/storage/result.py 内の97行目のように np.array((1.0, "None")) を実行した際に、"None" が str である影響で 1.0 も str 扱いされて、その後の比較処理の部分でエラーになっていました。
- type: pylocalの場合は、Noneは通常のNoneとして扱われるため、そちらに合わせる意図も込みで type:localの時も None を通常の None として扱うように aiaccel/cli/set_result.py を改修しました。
- 文字列の"None" を通常の None に変換する処理を追加しています。
- aiaccel/storage/result.py 内97行目の objectives に None が含まれている場合、そのまま np.max(もしくは np.min)を実行すると None との比較が発生しエラーになるため、objectivesからNoneを除外する処理を追加しました。
- (1.0, None)のような片方の目的関数の結果がNoneのような結果が含まれるaiaccelの結果をtensor boardで表示した時、パラメータと結果の組のテーブル表示が乱れることがありました。
- 例えば、下記のような結果をtensor boardで可視化しようとした際に、
- テーブルは以下のようになり、2番目のresultの値が表示されなくなります。
- このようになる原因の詳細は不明ですが、trial id の欄を 00000X のような0が連続する4~6桁の表記にすると発生する模様です。(tensor board単体のコードでも再現しました。tensor board 内部の何かと値が競合している可能性があります。)
- trial id の欄を 000000X のような7桁の表記にすると、以下のように正常に表示される(Noneの箇所は空欄)ので、暫定処理としてデフォルト設定を7桁とし、6桁以下の設定の場合は7桁表示に変更するように修正しました。
- 例えば、下記のような結果をtensor boardで可視化しようとした際に、