エラー 'tensorflow.python.framework.ops' has no attribute '_TensorLike'

対策

keras/backend/tensorflow_backend.py を、下記のように修正する。

from tensorflow.python.framework import tensor_util
def is_tensor(x):                                                                                                                                                      
    return tensor_util.is_tensor(x)
    #return isinstance(x, tf_ops._TensorLike) or tf_ops.is_dense_tensor_like(x)


Colabでも修正可能。
エラー画面で、該当ファイル名が青文字になっているはず。
クリックすると、右側にファイルが表示される。
そのまま修正し、command/ctrl + S で保存すればOK。
(スクショは撮り忘れました・・・)

参考

github.com

MMTrackingインストールメモ

基本的には公式のInstall.md通りだが、 いくつか躓きポイントがあったためメモする。

環境:Windows10 Home

  1. python>=3.7にしておく。 公式では、3.6以上と書いてあったが、3.6ではエラーが出た。 3.7以上であれば、インストールできた。

  2. 手順6の前に、WIndows10の「システムロケール」を切り替える。 そのまますすめると、6のインストール時に、「エンコードが・・・」というエラーが出た。 Windowsの「システムロケール」を変更することで、一旦回避する。

設定の「時刻と地域」→「地域と言語」→「日付、時刻、地域の追加設定」→「地域」 「管理」タブ→「システムロケールの変更」→「ベータ:ワールドワイド言語サポートで・・・」にチェックを入れる。

その後「OK」を選択し、再起動となる。 デフォルトが「UTF-8」になる。 参考|https://howpon.com/247

  1. 手順7で、足りないライブラリをインストール python setup.py develop を実行しても、いくつか足りないライブラリのためにエラーが出た。 エラー表示に出るライブラリをインストールする。

  2. pytest

  3. flake8

エラー対処法「Found dtype Long but expected Float」 # pytorch_Lighning

pytorch lightnin使用中に、 タイトルのエラーが出ました。

原因

正解ラベルの型が、floatで無かった。

対策

labelをfloatにする。 整数値で良くても、floatに型変換しておく。 下記、イメージ。

float(label)

github.com

pytorch_lightning エラー|validation_epoch_endで止まる

現象

validation_epoch_end内で、引数のリストの長さをべた書きして、処理を書いていました。

下図で言うと、valデータ合計÷バッチサイズ=25が、リストの長さだと想定していました。

f:id:pizza3900:20210813164258p:plain
イメージ図
(補足|validation_epoch_endの引数としては、validation_stepの戻り値のリストが返ってくる。)

しかし、その処理でエラーになっていました。

原因

原因は、学習前に自動的に動く、"sanity check" という機能でした。 学習前に、評価データを少し使って、挙動を確認するようです。 "少し"とは、デフォルトでは2バッチ分です。

対策

  1. 集計を工夫する 引数で来るリストの長さが変わってもよいように、集計の計算を変更すればよいです。

例えば、リストの長さが変わるので、for文で回すときはlen(リスト)とします。

for i in range(len(リスト)):
     ....

そもそもここで詰まったのは、validation_epoch_end引数のサイズが変わることを、考慮してなかったからでした。 実装の甘さが露呈してしまいました・・・。


一応、他の方法も記しておきます。

2. フラグを作って、1回目のvalidation_epoch_end呼び出しは、そのまま戻るようにする。

下記のイメージです。

IS_DONE_CHEK = 0    # 初期化
...
def validation_epoch_end(self, outputs):
        if IS_DONE_CHEK==0:
            IS_DONE_CHEK=1
            return    # 関数の呼び出しが初の時は、何もしない
        ...


3. num_sanity_val_stepsを-1にする。

Trainerの引数で、num_sanity_val_steps=-1とすれば、validation dataすべてに対してsanity checkが動くようです。 すべてに対して動いてくれれば、集計等の計算で困ることはないかもしれません。

参考

pytorch-lightning.readthedocs.io

機械学習用PCスペック(働くレガシーパーツたち)

機械学習コンペで用いている、ローカルPCのスペックを紹介しておこうと思います。ローカルPCは、自作デスクトップです。

最近はGoogle Colab が、便利です。Proに加えて、Pro+までサービスを出しています。

とはいえ、ローカルは何かと使いやすい(制限時間がない、画像やcsv等のデータ確認がしやすい)ので、おすすめです。


以下がスペックです。

GPU... RTX2070(GPUメモリ8GB)

CPU... corei7 3770K

メモリ... 16GB(DDR3)

マザーボード... H77

電源... 500W (80+ platinum)

ストレージ... 512GB(SSD)+2TB(HDD)


マザーボードやCPUは、PCを組んだ時のままです。

こうして振り返るってみると、長く使えてるなと感じます。