67850
## 理由

TensorflowとKerasを使って写真を2種類に分類する深層学習プログラムを、市販の書籍を参照して作成しました。この作成には、WindowsPCでAnacondaとJupiterNotebookを使いました。実際に2種類の写真を多くの枚数、用意し、学習データとテストデータに分け、それらを使ってWindowsPCで学習とテストを行いました。これにより、model.jsonとweight.h5が生成されました。

上記で生成されたmodel.jsonとweight.h5をラズパイに入れて、ラズパイで写真を撮影し、その写真が、2種類のうちどちらなのかをラズパイで即座に判定させたい。

## 環境

  * ラズパイのバージョン 3b+
  * debianのバージョン10.4
  * Python ラズパイにもともと3.7.3がインストール済み
  * pip ラズパイにインストール済みのpip18.1を20.1.1にアップデートした

## 行った作業とその結果

Tensorflowのホームページ（下記）に従って準備とインストール作業を行った。  
<https://www.tensorflow.org/install/pip>

  * 手順のうち、OSによって使うコマンドが違う箇所は、次のほうを選択した。
  * SUDOコマンドは[Raspberry Pi]の記述に倣った。
  * 仮想環境の作成は[Ubuntu/Mac OS]のうち「# sh, bash, or zsh」の場合の記述に倣った。

  * 仮想環境をvirtualenvで作成した。

  * 仮想環境ではラズパイにインストール済みのPython3.7.3を使用。
  * 仮想環境でのpipを20.1.1とした。
  * 仮想環境に入り、Tensorflowをpipでインストールしようとした。
  * 途中下記のような2回のwarningが表示されたが、インストール自体は最後まで進んだ。
```     WARNING: Retrying (Retry(total=4, connect=None, read=None,
redirect=None, status=None)) after connection broken by
'ProtocolError('Connection aborted.', RemoteDisconnected('Remote end closed
connection without response'))': /simple/protobuf/

    
    WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'ProtocolError('Connection aborted.', RemoteDisconnected('Remote end closed connection without response'))': /simple/h5py/
    
```

  * しかし、ホームページに書かれた「Verify the install」
```     $ python -c "import tensorflow as
tf;print(tf.reduce_sum(tf.random.normal([1000, 1000])))"

    
```

をすると、

```     2020-06-08 01:31:57.302837: E
tensorflow/core/platform/hadoop/hadoop_file_system.cc:132] HadoopFileSystem
load error: libhdfs.so: cannot open shared object file: No such file or
directory

    
```

と表示された。

  * 仮想環境で`pip freeze`とすると、リストの中に
```     tensorflow==1.14.0

    tensorflow-estimator==1.14.0
    
```

が表示された。（ホームページによるとバージョン2がインストールされるらしいが、なぜか1.14.0である）

  * 仮想環境でPythonを立ち上げ、importを試みたところ、
```     import numpy as np

    
```

はうまくいくが、

```     import tensorflow as tf

    
```

と入力すると、次のようなエラーメッセージが表示された。

```     2020-06-08 08:45:48.118904: E
tensorflow/core/platform/hadoop/hadoop_file_system.cc:132] HadoopFileSystem
load error: libhdfs.so: cannot open shared object file: No such file or
directory

    
```

（説明は以上です。）
CC BY-SA 4.0
2020-06-08T10:05:21.137
67419
2020-06-21T00:06:42.470
2020-06-09T10:07:49.310
19110
40533
question
python tensorflow raspberry-pi
ラズベリーパイにTensorflowを正しくインストールするための助言をください
現状 Tensorflow がサポートしている OS は Ubuntu、macOS、Windows、Raspbian (Raspberry Pi OS)
のみで Debian はサポートされていません。参照なさったページに書かれている手順も Raspbian が想定されており、Debian
ではありません。このためどこかで齟齬が発生している可能性があります。

手元で試していませんが、たとえば arm32 向けの wheel を公開している
<https://github.com/lhelontra/tensorflow-on-arm>
を使って以下のようにインストールすると上手くいかないでしょうか。

```

    curl -O https://github.com/lhelontra/tensorflow-on-arm/releases/download/v2.2.0/tensorflow-2.2.0-cp37-none-linux_armv7l.whl
    pip install --upgrade ./tensorflow-2.2.0-cp37-none-linux_armv7l.whl
    
```
CC BY-SA 4.0
2020-06-09T10:27:12.867
67460
2020-06-09T10:27:12.867
19110
67419
answer
【自己回答】  
頂いたコメントをもとに取り組んだところ，下記の方法でインストールできました。

github.com の PINTO0309氏のページ  
<https://github.com/PINTO0309/Tensorflow-bin/blob/master/README.md>  
を参照しました。  
このページの解説に沿い、自分のラズパイの条件を確認し、インストールすべきwhlファイルを決めた上で、このページ中の「Usage」に沿って実行しました。  
（質問では、仮想環境へインストールできない、と書きましたが、今回はとにかくインストールが正常終了すればよし、という方針を採り、仮想環境を使わずにインストールしました。）

以下に、実行したコマンドを記します。  
$のあとに記すのは、ターミナル画面で入力したコマンド。  
その次の行は、応答。（応答は要点のみ示す）  
(py3>)のあとに記すのは、ターミナル画面でpython3実行中に入力したコマンド。

◆debianのバージョン確認  
$ cat /etc/debian_version  
10.4

◆ラズパイのバージョン確認  
$ lsb_release -a  
Raspbian GNU/Linux 10 (buster)

◆Pythonのバージョン確認  
$ python3  
Python 3.7.3

◆CPUアーキテクチャーの確認  
$ cat /proc/cpuinfo  
ARMv7 Processor rev 4 (v7l)

◆gcc（GNUプロジェクトが開発・公開しているコンパイラ）のバージョン確認  
$ gcc --version  
gcc (Raspbian 8.3.0-6+rpi1) 8.3.0

◆ldd（共有ライブラリへの依存関係を表示するコマンド）のバージョン確認  
$ ldd --version  
ldd (Debian GLIBC 2.28-10+rpi1) 2.28

◆PINTO0309氏のページ中の「Usage Example of Python 3.x + Tensorflow v1
series」に沿って、以下を実行しました。  
$ sudo apt-get install -y libhdf5-dev libc-ares-dev libeigen3-dev gcc gfortran
python-dev libgfortran5  
libatlas3-base libatlas-base-dev libopenblas-dev libopenblas-base libblas-dev  
liblapack-dev cython openmpi-bin libopenmpi-dev libatlas-base-dev python3-dev

$ sudo pip3 install keras_applications==1.0.8 --no-deps

$ sudo pip3 install keras_preprocessing==1.1.0 --no-deps

$ sudo pip3 install h5py==2.9.0

$ sudo pip3 install pybind11

$ pip3 install -U --user six wheel mock

$ sudo pip3 uninstall tensorflow  
WARNING: Skipping tensorflow as it is not installed.

$ wget <https://github.com/PINTO0309/Tensorflow-
bin/raw/master/tensorflow-1.15.0-cp37-cp37m-linux_armv7l.whl>

$ sudo pip3 install tensorflow-1.15.0-cp37-cp37m-linux_armv7l.whl  
◆（途中、次の2つのエラーが発生）  
ERROR: tensorboard 1.15.0 has requirement setuptools>=41.0.0, but you'll have
setuptools 40.8.0 which is incompatible.  
Installing collected packages: protobuf, grpcio, wrapt, absl-py, termcolor,
zipp, importlib-metadata, markdown, tensorboard, google-pasta, opt-einsum,
tensorflow-estimator, astor, gast, tensorflow

Attempting uninstall: wrapt  
Found existing installation: wrapt 1.10.11  
ERROR: Cannot uninstall 'wrapt'. It is a distutils installed project and thus
we cannot accurately determine which files belong to it which would lead to
only a partial uninstall.

◆そこで、setuptoolsをダウンロード  
$ wget
<https://files.pythonhosted.org/packages/95/95/f657b6e17f00c3f35b5f68b10e46c3a43af353d8856bd57bfcfb1dbb3e92/setuptools-47.1.1-py3-none-
any.whl>

◆setuptoolsをインストール  
$ sudo pip3 install setuptools-47.1.1-py3-none-any.whl

◆wraptのバージョンを確認  
$ pip3 show wrapt  
Name: wrapt  
Version: 1.10.11

◆wraptをインストール  
$ sudo pip3 install -I wrapt  
Collecting wrapt  
Using cached
<https://www.piwheels.org/simple/wrapt/wrapt-1.12.1-cp37-cp37m-linux_armv7l.whl>
(68 kB)  
Installing collected packages: wrapt  
Successfully installed wrapt-1.12.1

◆tensorflowをインストール  
$ sudo pip3 install tensorflow-1.15.0-cp37-cp37m-linux_armv7l.whl  
Successfully installed tensorflow-1.15.0

$ python3  
◆種々のパッケージのインポート  
◆（下記の各インポートは、成功）  
(py3>) from tensorflow import keras  
(py3>) from tensorflow.keras.models import model_from_json  
(py3>) from tensorflow.keras.preprocessing.image import ImageDataGenerator  
(py3>) from tensorflow.keras.datasets import cifar10  
(py3>) from tensorflow.keras.models import Sequential  
(py3>) from tensorflow.keras.layers import Dense, Dropout, Activation, Flatten  
(py3>) from tensorflow.keras.layers import Conv2D, MaxPooling2D  
(py3>) from tensorflow.keras.layers import BatchNormalization  
(py3>) from tensorflow.keras import regularizers  
(py3>) from tensorflow.keras.callbacks import LearningRateScheduler  
(py3>) from tensorflow.keras import optimizers  
(py3>) from tensorflow.keras.utils import to_categorical  
(py3>) import matplotlib.pyplot as plt

◆（下記のインポートは、失敗）  
(py3>) from tensorflow.keras.utils import np_utils  
ImportError: cannot import name 'np_utils' from 'tensorflow.keras.utils'
(/usr/local/lib/python3.7/dist-
packages/tensorflow_core/python/keras/api/_v1/keras/utils/ **init**.py)

◆np_utilsのインストール  
$ sudo pip3 install np_utils  
Successfully installed future-0.18.2 np-utils-0.5.12.1

$ python3  
◆パッケージのインポート  
◆（下記のインポートは、成功）  
(py3>) import np_utils

◆以上でインストール作業を完了。
CC BY-SA 4.0
2020-06-21T00:06:42.470
67850
2020-06-21T00:06:42.470
40533
67419
answer