dockerで機械学習(12) with anaconda(12)「Deep Learning 深層学習」Ian Goodfellow, Yoshua Bengio, Aaron Courville 著

# 1.すぐに利用したい方へ(as soon as)
Deep Learning 深層学習
Ian Goodfellow, Yoshua Bengio, Aaron Courville 著
http://www.deeplearningbook.org

## docker
dockerを導入し、Windows, Macではdockerを起動しておいてください。
Windowsでは、BiosでIntel Virtualizationをenableにしないとdockerが起動しない場合があります。
また、セキュリティの警告などが出ることがあります。

## docker run

```
$ docker run -p 8888:8888 -it kaizenjapan/anaconda-deep-12 /bin/bash
```

以下のshell sessionでは
(base) root@f19e2f06eabb:/#は入力促進記号(comman prompt)です。実際には数字の部分が違うかもしれません。この行の#の右側を入力してください。
それ以外の行は出力です。出力にエラー、違いがあれば、コメント欄などでご連絡くださると幸いです。
それぞれの章のフォルダに移動します。

dockerの中と、dockerを起動したOSのシェルとが表示が似ている場合には、どちらで捜査しているか間違えることがあります。dockerの入力促進記号(comman prompt)に気をつけてください。

## ファイル共有または複写

dockerとdockerを起動したOSでは、ファイル共有をするか、ファイル複写するかして、生成したファイルをブラウザ等表示させてください。参考文献欄にやり方のURLを記載しています。

複写の場合は、dockerを起動したOS側コマンドを実行しました。お使いのdockerの番号で置き換えてください。複写したファイルをブラウザで表示し内容確認しました。

# 非公式ソース

"Deep Learning" Ian Goodfellow, Yoshua Bengio, Aaron Courville非公式ソース。


## jupyter notebook

```shell-session
(base) root@502e93a537bc:/deeplearning# jupyter notebook --ip=0.0.0.0 --allow-root
[I 05:58:33.267 NotebookApp] Writing notebook server cookie secret to /root/.local/share/jupyter/runtime/notebook_cookie_secret
[I 05:58:35.123 NotebookApp] JupyterLab beta preview extension loaded from /opt/conda/lib/python3.6/site-packages/jupyterlab
[I 05:58:35.123 NotebookApp] JupyterLab application directory is /opt/conda/share/jupyter/lab
[I 05:58:35.253 NotebookApp] Serving notebooks from local directory: /deeplearning
[I 05:58:35.256 NotebookApp] 0 active kernels
[I 05:58:35.257 NotebookApp] The Jupyter Notebook is running at:
[I 05:58:35.257 NotebookApp] http://502e93a537bc:8888/?token=5b8bbb3f81754ee67fcca0a9bcf64ddb6c4a5eef1bbb7293
[I 05:58:35.258 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[W 05:58:35.260 NotebookApp] No web browser found: could not locate runnable browser.
[C 05:58:35.262 NotebookApp]

    Copy/paste this URL into your browser when you connect for the first time,
    to login with a token:
        http://502e93a537bc:8888/?token=5b8bbb3f81754ee67fcca0a9bcf64ddb6c4a5eef1bbb7293&token=5b8bbb3f81754ee67fcca0a9bcf64ddb6c4a5eef1bbb7293
[I 05:58:50.909 NotebookApp] 302 GET / (172.17.0.1) 0.53ms
[I 05:58:50.932 NotebookApp] 302 GET /tree? (172.17.0.1) 1.17ms

```
dockerを起動したOSのブラウザで、URL欄に localhost:8888 を入力してください。

<img width="453" alt="jupy1.png" src="https://qiita-image-store.s3.amazonaws.com/0/51423/4d3381eb-e820-3d77-1f55-fe01a9b15714.png">

tokenに「token=5b8bbb3f81754ee67fcca0a9bcf64ddb6c4a5eef1bbb7293」の右辺の値を入れる。

## autoencoder_experiments.ipynb

<img width="866" alt="jupyex1.png" src="https://qiita-image-store.s3.amazonaws.com/0/51423/a3090393-6749-d2f4-cf9f-6f2a48f750b0.png">

## classification.ipynb

<img width="866" alt="jupyex2.png" src="https://qiita-image-store.s3.amazonaws.com/0/51423/ba39d067-9425-3858-6302-d9a49df25a62.png">

## low_precision.ipynb

<img width="855" alt="jupyex3.png" src="https://qiita-image-store.s3.amazonaws.com/0/51423/829eace1-49ee-c228-8277-06d6eb48bfe0.png">



# 2. dockerを自力で構築する方へ

ここから下は、上記のpullしていただいたdockerをどういう方針で、どういう手順で作ったかを記録します。
上記のdockerを利用する上での参考資料です。本の続きを実行する上では必要ありません。
自力でdocker/anacondaを構築する場合の手順になります。
dockerfileを作る方法ではありません。ごめんなさい。
##docker

ubuntu, debianなどのLinuxを、linux, windows, mac osから共通に利用できる仕組み。
利用するOSの設定を変更せずに利用できるのがよい。
同じ仕様で、大量の人が利用することができる。
ソフトウェアの開発元が公式に対応しているものと、利用者が便利に仕立てたものの両方が利用可能である。今回は、公式に配布しているものを、自分で仕立てて、他の人にも利用できるようにする。
## python

DeepLearningの実習をPhthonで行って来た。
pythonを使う理由は、多くの機械学習の仕組みがpythonで利用できることと、Rなどの統計解析の仕組みもpythonから容易に利用できることがある。
### anaconda

pythonには、2と３という版の違いと、配布方法の違いなどがある。
Anacondaでpython3をこの１年半利用してきた。
Anacondaを利用した理由は、統計解析のライブラリと、JupyterNotebookが初めから入っているからである。
## docker公式配布

ubuntu, debianなどのOSの公式配布,gcc, anacondaなどの言語の公式配布などがある。
これらを利用し、docker-hubに登録することにより、公式配布の質の確認と、変更権を含む幅広い情報の共有ができる。dockerが公式配布するものではなく、それぞれのソフト提供者の公式配布という意味。
### docker pull

docker公式配布の利用は、URLからpullすることで実現する。
### docker Anaconda

anacondaが公式配布しているものを利用。

```shell-session:docker/anaconda
$  docker pull continuumio/anaconda3
Using default tag: latest
latest: Pulling from continuumio/anaconda3
Digest: sha256:e07b9ca98ac1eeb1179dbf0e0bbcebd87701f8654878d6d8ce164d71746964d1
Status: Image is up to date for continuumio/anaconda3:latest
OgawaKiyoshi-no-MacBook-Pro:docker-toppers ogawakiyoshi$ docker run -it continuumio/anaconda3 /bin/bash
```

## apt

```shell-session:docker/anaconda
(base) root@f19e2f06eabb:/# apt update; apt -y upgrade

(base) root@f19e2f06eabb:/# apt install -y procps vim apt-utils sudo
```

## 非公式ソース git

"Deep Learning" Ian Goodfellow, Yoshua Bengio, Aaron Courville、非公式ソース。

```shell-session:docker/anaconda
(base) root@f19e2f06eabb:/# git clone https://github.com/yohokuno/deeplearning
```

## pip

```shell-session:docker/anaconda
(base) root@f19e2f06eabb:/deep-learning-from-scratch-2/ch01# pip install --upgrade pip
Collecting pip
  Downloading https://files.pythonhosted.org/packages/5f/25/e52d3f31441505a5f3af41213346e5b6c221c9e086a166f3703d2ddaf940/pip-18.0-py2.py3-none-any.whl (1.3MB)
    100% |████████████████████████████████| 1.3MB 2.0MB/s 
distributed 1.21.8 requires msgpack, which is not installed.
Installing collected packages: pip
  Found existing installation: pip 10.0.1
    Uninstalling pip-10.0.1:
      Successfully uninstalled pip-10.0.1
Successfully installed pip-18.0
```
### pyqt5

```shell-session:docker/anaconda
(base) root@f19e2f06eabb:/deep-learning-from-scratch-2/ch01# pip install pyqt5
Collecting pyqt5
  Downloading https://files.pythonhosted.org/packages/3a/c7/4a9bec78c864051051b41b4cc76672ecc232e6dc7dbb91a5f8ff6f20ff64/PyQt5-5.11.2-5.11.1-cp35.cp36.cp37.cp38-abi3-manylinux1_x86_64.whl (117.9MB)
    100% |████████████████████████████████| 117.9MB 311kB/s 
Collecting PyQt5_sip<4.20,>=4.19.11 (from pyqt5)
  Downloading https://files.pythonhosted.org/packages/d7/db/06ad1f62a1f80a5df639c322066f03db381c1a6322c02087e75092427838/PyQt5_sip-4.19.12-cp36-cp36m-manylinux1_x86_64.whl (66kB)
    100% |████████████████████████████████| 71kB 30kB/s 
distributed 1.21.8 requires msgpack, which is not installed.
Installing collected packages: PyQt5-sip, pyqt5
Successfully installed PyQt5-sip-4.19.12 pyqt5-5.11.2
```

## apt
### libgl1-mesa-dev

```shell-session:docker/anaconda
(base) root@f19e2f06eabb:/deep-learning-from-scratch-2/ch01# apt install -y libgl1-mesa-dev
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
  libdrm-amdgpu1 libdrm-dev libdrm-intel1 libdrm-nouveau2 libdrm-radeon1 libdrm2 libgl1-mesa-dri libgl1-mesa-glx libglapi-mesa
  libllvm3.9 libpciaccess0 libpthread-stubs0-dev libsensors4 libtxc-dxtn-s2tc libx11-dev libx11-doc libx11-xcb-dev libx11-xcb1
  libxau-dev libxcb-dri2-0 libxcb-dri2-0-dev libxcb-dri3-0 libxcb-dri3-dev libxcb-glx0 libxcb-glx0-dev libxcb-present-dev
  libxcb-present0 libxcb-randr0 libxcb-randr0-dev libxcb-render0 libxcb-render0-dev libxcb-shape0 libxcb-shape0-dev libxcb-sync-dev
  libxcb-sync1 libxcb-xfixes0 libxcb-xfixes0-dev libxcb1-dev libxdamage-dev libxdamage1 libxdmcp-dev libxext-dev libxfixes-dev
  libxfixes3 libxshmfence-dev libxshmfence1 libxxf86vm-dev libxxf86vm1 mesa-common-dev x11proto-core-dev x11proto-damage-dev
  x11proto-dri2-dev x11proto-fixes-dev x11proto-gl-dev x11proto-input-dev x11proto-kb-dev x11proto-xext-dev x11proto-xf86vidmode-dev
  xorg-sgml-doctools xtrans-dev
Suggested packages:
  pciutils lm-sensors libxcb-doc libxext-doc
The following NEW packages will be installed:
  libdrm-amdgpu1 libdrm-dev libdrm-intel1 libdrm-nouveau2 libdrm-radeon1 libdrm2 libgl1-mesa-dev libgl1-mesa-dri libgl1-mesa-glx
  libglapi-mesa libllvm3.9 libpciaccess0 libpthread-stubs0-dev libsensors4 libtxc-dxtn-s2tc libx11-dev libx11-doc libx11-xcb-dev
  libx11-xcb1 libxau-dev libxcb-dri2-0 libxcb-dri2-0-dev libxcb-dri3-0 libxcb-dri3-dev libxcb-glx0 libxcb-glx0-dev libxcb-present-dev
  libxcb-present0 libxcb-randr0 libxcb-randr0-dev libxcb-render0 libxcb-render0-dev libxcb-shape0 libxcb-shape0-dev libxcb-sync-dev
  libxcb-sync1 libxcb-xfixes0 libxcb-xfixes0-dev libxcb1-dev libxdamage-dev libxdamage1 libxdmcp-dev libxext-dev libxfixes-dev
  libxfixes3 libxshmfence-dev libxshmfence1 libxxf86vm-dev libxxf86vm1 mesa-common-dev x11proto-core-dev x11proto-damage-dev
  x11proto-dri2-dev x11proto-fixes-dev x11proto-gl-dev x11proto-input-dev x11proto-kb-dev x11proto-xext-dev x11proto-xf86vidmode-dev
  xorg-sgml-doctools xtrans-dev
0 upgraded, 61 newly installed, 0 to remove and 25 not upgraded.
Need to get 24.4 MB of archives.
After this operation, 193 MB of additional disk space will be used.
Get:1 http://deb.debian.org/debian stretch/main amd64 libdrm2 amd64 2.4.74-1 [36.2 kB]
```
## 便利 sh

```shell-session:docker/anaconda
(base) root@502e93a537bc:/deeplearning# vi py.sh
```
で編集してみる。

```sh:py.sh
#!/bin/bash
for f in *.py
  do
    python $f
  done
```
実行権を付与して実行。

```shell-session:docker/anaconda
(base) root@502e93a537bc:/deeplearning# chmod +x py.sh
(base) root@502e93a537bc:/deeplearning#  ./py.sh
```

## 横道
他の本のdockerから始めるのも手かも。

```shell-session

$ docker run -it -p 8888:8888 -p 6006:6006 kaizenjapan/anaconda-keras /bin/bash
```


# 3.docker hub 登録
ここからは、新たにソフトを導入したdockerを自分のhubに登録する方法です。
ご自身で何かソフトウェアを導入されたら、ぜひhubに登録することをお勧めします。
続きの作業を誰かに依頼したり、エラーがでてわからなくなったときに、対処方法を問い合わせるのにも役立ちます。

```
$ docker ps 
CONTAINER ID        IMAGE                   COMMAND                  CREATED             STATUS              PORTS                                            NAMES
b28c065c8b45        continuumio/anaconda3            "/usr/bin/tini -- /b…"   21 hours ago        Up 21 hours                                                                                  elegant_gates       

$ docker commit b28c065c8b45  kaizenjapan/anaconda-deep-12
sha256:2d26c8621bf9cc3c2400477a9db98bb21a953fdbe53c22da395ca4a80b15261f

$ docker push  kaizenjapan/anaconda-deep-12
The push refers to repository [docker.io/kaizenjapan/anaconda-deep-1]
b6d479cc3a0f: Pushing [==>                                                ]  68.41MB/1.453GB
6410333f34cf: Mounted from kaizenjapan/anaconda-keras-ten 
cf342e34eca3: Mounted from kaizenjapan/anaconda-keras-ten 
cea95006e36a: Mounted from kaizenjapan/anaconda-keras-ten 
0f3a12fef684: Mounted from kaizenjapan/anaconda-keras-ten 

```

# 参考資料(reference)
dockerで機械学習(python:anaconda)「直感Deep Learning」Antonio Gulli、Sujit Pal　第1章,第2章
https://qiita.com/kaizen_nagoya/items/483ae708c71c88419c32

OpenCVをPythonで動かそうとしてlibGL.soが無いって言われたけど解決した。
https://qiita.com/toshitanian/items/5da24c0c0bd473d514c8

サーバサイドにおけるmatplotlibによる作図Tips
https://qiita.com/TomokIshii/items/3a26ee4453f535a69e9e

Dockerでホストとコンテナ間でのファイルコピー
https://qiita.com/gologo13/items/7e4e404af80377b48fd5

Docker for Mac でファイル共有を利用する
https://qiita.com/seijimomoto/items/1992d68de8baa7e29bb5

「名古屋のIoTは名古屋のOSで」Dockerをどっかーらどうやって使えばいいんでしょう。TOPPERS/FMP on RaspberryPi with Macintosh編 ５つの関門
https://qiita.com/kaizen_nagoya/items/9c46c6da8ceb64d2d7af

64bitCPUへの道 and/or 64歳の決意
https://qiita.com/kaizen_nagoya/items/cfb5ffa24ded23ab3f60

ゼロから作るDeepLearning２自然言語処理編　読書会の進め方（例）
https://qiita.com/kaizen_nagoya/items/025eb3f701b36209302e

Ethernet 記事一覧　Ethernet(0)
https://qiita.com/kaizen_nagoya/items/88d35e99f74aefc98794

Wireshark 一覧 wireshark(0)、Ethernet(48) 
https://qiita.com/kaizen_nagoya/items/fbed841f61875c4731d0

線網（Wi-Fi）空中線(antenna)(0) 記事一覧(118/300目標)
https://qiita.com/kaizen_nagoya/items/5e5464ac2b24bd4cd001

C++ Support(0)　
https://qiita.com/kaizen_nagoya/items/8720d26f762369a80514

Coding Rules(0) C Secure , MISRA and so on
https://qiita.com/kaizen_nagoya/items/400725644a8a0e90fbb0

Autosar Guidelines C++14 example code compile list(1-169)
https://qiita.com/kaizen_nagoya/items/8ccbf6675c3494d57a76

Error一覧(C/C++, python, bash...) Error(0)
https://qiita.com/kaizen_nagoya/items/48b6cbc8d68eae2c42b8

なぜdockerで機械学習するか 書籍・ソース一覧作成中 (目標100)
https://qiita.com/kaizen_nagoya/items/ddd12477544bf5ba85e2

言語処理100本ノックをdockerで。python覚えるのに最適。:10+12
https://qiita.com/kaizen_nagoya/items/7e7eb7c543e0c18438c4

プログラムちょい替え（0）一覧:4件
https://qiita.com/kaizen_nagoya/items/296d87ef4bfd516bc394

一覧の一覧( The directory of directories of mine.) Qiita(100)
https://qiita.com/kaizen_nagoya/items/7eb0e006543886138f39

官公庁・学校・公的団体（NPOを含む）システムの課題、官（０）
https://qiita.com/kaizen_nagoya/items/04ee6eaf7ec13d3af4c3

プログラマが知っていると良い「公序良俗」
https://qiita.com/kaizen_nagoya/items/9fe7c0dfac2fbd77a945

自動制御、制御工学一覧（０）
https://qiita.com/kaizen_nagoya/items/7767a4e19a6ae1479e6b

Rust(0) 一覧　
https://qiita.com/kaizen_nagoya/items/5e8bb080ba6ca0281927

小川清最終講義、最終講義（再）計画, Ethernet(100) 英語(100) 安全(100)
https://qiita.com/kaizen_nagoya/items/e2df642e3951e35e6a53

### 文書履歴(document history)
ver. 0.10 初稿 20180926 昼
ver. 0.11 docker push 追記 20180927 午前
ver. 0.12 jupyternotebook画像追記 20181015 
ver. 0.13 補足 20191105
### 最後までおよみいただきありがとうございました。
いいね　💚、フォローをお願いします。
#### Thank you very much for reading to the last sentence.
Please press the like icon 💚　and follow me for your happy life.