6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AttributeError: module 'numpy' has no attribute 'XXX' エラーの解決ログ

Last updated at Posted at 2023-11-24

はじめに

TensorFlowを使用していて、以下のエラーが発生した際の解決ログをまとめました。このエラーはTensorFlowに限らず、他のライブラリでも同様の問題が発生する可能性があるため、記事にまとめました。

AttributeError: module 'numpy' has no attribute 'object'.
`np.object` was a deprecated alias for the builtin `object`. To avoid this error in existing code, use `object` by itself. Doing this will not modify any behavior and is safe. 
The aliases was originally deprecated in NumPy 1.20; for more details and guidance see the original release note at:
    https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations

上記のエラーが出た環境

  • conda 23.10.0
  • tensorflow 2.4.1
  • numpy 1.26.0

筆者がこのエラーに遭遇したのは、Anaconda仮想環境でconda install tensorflow-gpuを使用しTensorFlowをインストールし、Pythonでimport tenosrflow as tfを実行した時でした。

エラーの原因

このエラーは、エラーメッセージに記載されたnumpy v1.20のリリースノートを確認すると、np.intが組み込み型intのエイリアスであり、混乱を招いていたため、そのような書き方が非推奨となったことが原因です。

さらに、numpy v1.24のリリースノートで非推奨期限が切れが公表され、このバージョンを境に徐々に廃止が進み、エラーが発生するようになりました。

解決策

基本的にnp.intのような書き方をしなければ問題ないです。np.intの代わりにintを使うといった具合です。
しかし、実際のケースではライブラリの中で使われていることもあり、なかなかソースコードを直接手で変更することが困難な場合が多いです。

その場合の解決策として3種類の方法を紹介します。

解決策1. numpyをダウングレード

このエラーはnumpyのバージョン1.24で廃止が開始されたため、それ以前のバージョンを利用すれば問題ありません。
例えば、numpyの1.24.0以下で最新のバージョンが1.23.5なので、このバージョンを指定してインストールし直すと良いと思います。

解決策2. numpyの依存関係のあるライブラリをアップグレード

このnumpyの変更を受け、numpyと依存関係にあるライブラリもnp.intなどを使わずに開発されている場合があります。最新のものにアップグレードすることで解決する可能性があります。

解決策3. 組込み型のintnp.intにエイリアスを貼る(非推奨)

こちらは、廃止となったnp.intをエイリアスで復活させる方法ですが、非推奨です。numpy以外のライブラリでエラーが出ている場合は、先にnumpyをインポートしてエイリアスを貼ることで、エラーを回避することはできると思います。

例えば、tensorflow 2.4.1、numpy 1.26.0を使っているとして、この方法を取るには以下のように書きます。

import numpy as np

# 廃止となったエイリアスを書く(この例はtensorflow v2.4.1で使われている最低限の変更。ライブラリに応じて適宜修正が必要。)
np.object = object
np.bool = bool
np.int = int
np.float = float
np.typeDict = {k: v for k, v in np.sctypeDict.items() if isinstance(v, type)}

# その後にインポート
import tensorflow as tf

ただし、この手法は非推奨であり、互換性の問題を引き起こす可能性があるため、慎重に検討すると良いと思います。

まとめ

conda insatll tensorflow-gpuでこの問題に遭遇し、解決に時間を溶かしていたので、この解決ログが同様の問題に悩む方々の助けになれば幸いです。

参考資料

6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?