top of page

Raspberry piでkerasを使う時に注意すること


概要


Raspberry piでディープラーニングをしようと思いkerasをインストールしたら、importの時点で以下のエラーが出る


ValueError: numpy.ndarray size changed, may indicate binary incompatibility. Expected 88 from C header, got 80 from PyObject

ModuleNotFoundError: No module named 'tensorflow.contrib'



原因


どうも、tensorflowとkerasのバージョンが合っていないことが原因らしい。Raspberry pi 用のOSであるRaspbian用のtensorflowの最新バージョンは未だ1.14でしかない、、、

kerasとtensorflowのバージョン対応関係はよくわかっていないが、pipでバージョン指定せずにインストールしたため、kerasの方に新しいバージョンが入ってしまったのではないかと推測している。



解決策


tensorflow内部のtensorflow.kerasを使う。これならばバージョンの依存関係の問題は起きない。というかkeras自体がこの流れになっているらしい(マルチバックエンドKerasの終焉、tf.kerasに一本化)。

すでにkerasでプログラムを書いてしまっている場合でも

import tensorflow.keras as keras

としてしまえばほとんどそのまま使える。


ほとんど、と言ったのは、僕の場合1点だけそのまま使えない部分があったため。

model=keras.models.load_model(model_name)

とすると、以下のエラーが発生。

str' object has no attribute 'decode'

これはh5pyのバージョンが新しいせいのようだ。h5pyを2.10.0にダウングレードしたら解決した。(参考


また、学習は別の環境で行っている場合は(というかその方が多いと思うが)、そちらの環境のtensorflowのバージョンも下げて学習し直す必要がある。Mac、Windows、google colaboratoryなどではバージョン指定しないと最新のtensorflow2.xが入ると思う。



最後に


バージョンの依存関係には気を付けましょう、、、

最新記事

すべて表示

[Python]pandas.DataFrameをjsonで出力

概要 pythonでデータ解析を行っている。解析自体はpandasを用いて行い、最終結果はpandas.DataFrameの形式で保持されている。 この結果を他のアプリケーションで利用するため、json形式でファイル出力したい。 やり方 1 pandas.DataFrameをdictionaryに変換 data = df.to_dict(orient='records') 2 ファイルに出力 wi

[Python] 条件付きでフィッティングをする

概要 フィッティングを行いたい場合、pythonならばscipy.optimize.leastsqなどでできます。 しかし、フィッティングを行う場合、フィッティングパラメータに条件を付けたい場合も多々あります。 例えば、下記のようにパラメータa、bは共に正の範囲で最適な値を求める、という感じです。 f(x, a, b)=a*x^2+b (a>0 and b>0) 今回はそんな手法についてご紹介しま

コメント


あなたの買い物をサポートする
アプリ Shop Plan

iphone6.5p2.png

​いつ何を買うかの計画を立てられるアプリです。

google-play-badge.png
Download_on_the_App_Store_Badge_JP_RGB_blk_100317.png

靴を大切にしよう!靴管理アプリ SHOES_KEEP

納品:iPhone6.5①.png

靴の履いた回数、お手入れ回数を管理するアプリです。

google-play-badge.png
Download_on_the_App_Store_Badge_JP_RGB_blk_100317.png

「後で読む」を忘れないアプリ ArticleReminder

気になった​Webサイトを登録し、指定時刻にリマインダを送れるアプリです

google-play-badge.png
Download_on_the_App_Store_Badge_JP_RGB_blk_100317.png
bottom of page