環境システム株式会社公式HP

〒660-0083 兵庫県尼崎市道意町7-1-3
尼崎リサーチ・インキュベーションセンター512

アイコン06-6657-5130

アイコンsales@hydrolab.co.jp

お問い合わせ

アイコン06-6657-5130

アイコンsales@hydrolab.co.jp

お問い合わせ

蛇使いな彼女BLOG

【第125回】PyTorch入門~後日談~

2025.03.21

PyTorchについて、これまでスムーズに進行してきましたが

実際のところ、モデルの学習と評価を行う際にパッケージ依存の警告や以下のエラーが発生していました。

今回は、エラーの内容と改善方法についてまとめます。

まず1つ目、

近傍サンプリングでエラーが出ているみたいです。これに関してはネット上で調べたら山ほど資料が出てくるので詳しい説明はしませんが、

以下の1行でFalseが出れば、単純にライブラリのインストールができていないだけです。

>>> print(torch_geometric.typing.WITH_PYG_LIB)
False
↑インストールしたら直ります

pip install pyg-lib -f https://data.pyg.org/whl/nightly/torch-2.1.0+cu118.html

上記、.html直前のtorchバージョンは現在使用しているバージョンと同じものを指定します。

バージョン参照元

次に2つ目、

モデルのトレーニングを開始してすぐに発生したエラーですが

このRuntimeErrorがくせ者で、以下のコマンドからtorchと関連ツールのバージョンを上げても改善しませんでした。

◆巷の解決法

pip install torch_scatter torch_sparse torch_cluster torch_spline_conv -f https://data.pyg.org/whl/torch-2.1.0+cpu.html

pip install --upgrade torch
pip install --upgrade ultralytics

この後1日くらい悩んでいたんですが、そもそもエッジインデックスに関わるエラーということで

もう一度スクリプトを確認していくことにしました。(見やすくするために順番変えたり書き換えたりしているところがあったので(笑))

すると原因分かりました!

遡ること、mappedIDを作ったとき

もとのコードでpd.RangeIndexを使う意味が分からなかったので、数値処理ではおなじみのnp.arangeに変更したのがいけなかったようです。

♯間違い
unique_user_id = pd.DataFrame({'userId': unique_user_id,
                               'mappedID':np.arange(len(unique_user_id)),
                               })

unique_movie_id = pd.DataFrame({'movieId': unique_movie_id,
                                'mappedID': np.arange(len(unique_movie_id)),
                               })

np.agangeは型がint32になってしまっているのが原因でした!!

♯正解
unique_user_id = pd.DataFrame({'userId': unique_user_id,
                               'mappedID':pd.RangeIndex(len(unique_user_id)),
                               })

unique_movie_id = pd.DataFrame({'movieId': unique_movie_id,
                                'mappedID': pd.RangeIndex(len(unique_movie_id)),
                               })

pd.RangeIndexを使うとマッピングIDがnp.int64の型で作成されるため、無事モデルのトレーニング~検証まで実行することができました!

こんな細かいところにも気を使わないとうまく動かないなんて( ゚Д゚)

ちなみに、torchのバージョンはこれらのエラーと戦う中で最終的に2.5.1+cpuに落ち着きました。

(結局GPU無いからCUDAの意味ないじゃんと我に返りました)

そして結構なボリュームのデータセットを扱いましたが、CPUで処理できる事が分かったので、おいおいノードとエッジの図化について勉強していきたいと思います。

それでは('◇')ゞ

pagetop