Python 機械学習

機械学習モデルが「dtype mismatch」で読み込めない

機械学習モデルが「dtype mismatch」で読み込めない

機械学習モデルが「dtype mismatch」で読み込めない。
'ValueError: Buffer dtype mismatch, expected 'SIZE_t' but got 'long long''
Pythonで上のようなエラーが出る理由について紹介する。


現象

  • scikit-learnRandomForestRegressorでモデルを学習
  • 学習させたモデルをpickleでバイナリファイルとして保存
  • モデルファイルを別のPCで読み込み

この作業を行うと以下のエラーが発生する。
'ValueError: Buffer dtype mismatch, expected 'SIZE_t' but got 'long long''


pickleとは

pickleとはPythonの変数やクラスインスタンスをファイルに書き出して、別のpythonプログラムで使えるようにできる機能。

Python: オブジェクトを漬物 (Pickle) にする - CUBE SUGAR CONTAINER


エラー内容

dtype mismatch, expected 'SIZE_t' but got 'long long'
つまりSIZE_t型だと思って読み込もうとしたらlong long型が来たので型が合わなくてエラーになっている。


エラー原因

原因は学習させたPCとモデルを読み込んだPCのOSのバージョンが違うこと。
以下のサイトを読むに、RandomForestRegressorは32bitと64bitで異なる型を使っていることわかる。
64bit版で学習したモデルは32bit版とは異なる型のデータなので、32bit版で読み込もうとした際に型が合わずにエラーになったわけである。

This occurs because the random forest code uses different types for indices on 32-bit and 64-bit machines.
machine learning - Scikits-Learn RandomForrest trained on 64bit python wont open on 32bit python - Stack Overflow


まとめ

  • 同じようなクラスでも32bit版と64bit版で内部の型が違うことがある
  • 内部の型が異なるとpickleでシリアライズしても再利用できない

というより32bit版Windowsではメモリも十分に使えないので64bit版に切り替えるべきである。


ITipsと同じようなブログを作る方法

ブログに興味がありますか?

もしブログに興味がある場合は↓このページ↓を参考にすれば、ITipsと同じ構成でブログを作ることができます

サーバー、ドメイン、ASPと【ブログに必要なものは全て】このページに書きました。
同じ構成でブログ作るのはいいけど、記事はマネしないでネ (TДT;)

ランキング参加中

にほんブログ村 IT技術ブログへ

他にもブログやSNSで紹介してくれると励みになります。

はてブのコメントで酷評されると泣きます(´;ω;`)

-Python, 機械学習
-,

© 2024 ITips