[Python] AI 12 Chainer + MNISTによる深層学習 Flaskベースアプリの導入 その3 Dockerfile

前回のDockerfileでdocker-composeファイルを走らせたところ、またエラーが発生しました。

調べてみるとTensorFlowはバージョン1を使っており、その場合PythonとKerasが新しいバージョンだと動かないということが判明しました。以下のようにDockerfileを修正しました。Pythonは元の3.5に戻しました。Kerasは2.3.1はNG、2.2.4でOKでした。

教本が発行された2019年6月時点では良書だったのかもしれませんが、2021年10月現在かなりのコードがライブラリの相性により、まともに動かなくなっています。こんなに早く風化するとは、AIの世界はシビアですね。先端技術ですから後方互換は考えないということでしょう。

2019年ならまだまだ新しいと思って購入したものの、のんびり楽しむどころかビシビシ鍛えられています。この本でプログラミング初心者が独習するのはちょっと厳しいかと思います。

FROM python:3.5-stretch

RUN mkdir -p /usr/src/app
ADD ./app /usr/src/app
RUN pip3 install --upgrade pip
RUN pip3 install requests
RUN pip3 install Flask
RUN pip3 install flask-cors
RUN pip3 install opencv-python
RUN pip3 install opencv-contrib-python
RUN pip3 install tensorflow==1.15
RUN pip3 install keras==2.2.4
RUN pip3 install chainer
RUN pip3 install Pillow
RUN apt-get update
RUN apt-get install -y libgl1-mesa-dev

WORKDIR /usr/src/app
EXPOSE 5000
RUN export FLASK_ENV=development
Chainer Dogs & Cats model is loaded.
Chainer MNIST model is loaded.
Model: "sequential_1"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d_1 (Conv2D)            (None, 26, 26, 32)        320       
_________________________________________________________________
conv2d_2 (Conv2D)            (None, 24, 24, 64)        18496     
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 12, 12, 64)        0         
_________________________________________________________________
dropout_1 (Dropout)          (None, 12, 12, 64)        0         
_________________________________________________________________
flatten_1 (Flatten)          (None, 9216)              0         
_________________________________________________________________
dense_1 (Dense)              (None, 128)               1179776   
_________________________________________________________________
dropout_2 (Dropout)          (None, 128)               0         
_________________________________________________________________
dense_2 (Dense)              (None, 10)                1290      
=================================================================
Total params: 1,199,882
Trainable params: 1,199,882
Non-trainable params: 0
 _________________________________________________________________
Keras MNIST model is loaded.
TensorFlow Flower model is loaded.
* Serving Flask app "app" (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)