【Windows10】「ゼロから作るDeep Learning」環境構築

# はじめに

この資料は、「ゼロから作るDeep Learning」(1)～(3)の各書籍のコードを動かすために必要な準備を記載したものです。
基本的にプログラム書いたことのない方か、経験が浅い方向けです。
Windows上では開発しないという方にも役立つかもしれません。

「gitとかvscodeとかそんなもの当たり前に入ってるよ！」
という方にはこの資料は不要なのでご注意ください。

# Pythonのインストール

公式サイトからインストーラをダウンロードする。
https://www.python.org/

ページ上部の'Donwloads'をポイントし、'Download for Windows'の下に表示されるリンクをクリックするとダウンロードできる。

インストール時にパスを通しておくことを忘れずに。
具体的には、インストールウィザードの最初の画面で、「Add Python 3.X to PATH」にチェックを入れる。

これを怠るとpipコマンドが使えない。
また、Windowsストアにある未インストールのPythonと誤認してコマンドを受け付けてくれなくなるなどの不具合が出る場合がある(経験談)。

# gitのインストール

サンプルコードがgithubにあるのでダウンロードはgit cloneで行うことにする。
そのための準備として、gitのインストールが必要となる。

gitのインストールは公式サイトへ。
https://git-scm.com/

ページ右側にある'Download x.xx.xx for Windows'のリンクをクリックするとインストーラがダウンロードできる。

# Pythonモジュール類のインストール

本書のプログラムの実行に必要なライブラリ類をインストールしておく。
必要なライブラリは巻によって異なるが、まず1巻のみを読み進めるならばnumpyとmatplotlabの2つのみインストールしておけば問題ない。
それ以外のライブラリ類は2巻・3巻のコードを実行するために必要となるものである。

スタートメニューから**git bash**を起動する。
(コマンドプロンプトでも可能)
![git_bash.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/633415/ace2c34a-1f4a-8b56-427e-f872ea8dbc75.png)

まず、pip自体をアップデートしておく。
pipは頻繁にアップデートされるので、既にpythonをインストールしている方でもアップデートすることをおすすめする。

```shell:bash
$ pip install --upgrade pip
```

## numpy [1～3巻]

その後、numpyをインストール。
numpyはPythonの数値計算ライブラリである。

```shell:bash
$ pip install numpy
```

## matplotlib [1～3巻]

続いて、matplotlibをインストール。
matplotlibは機械学習本体の動作には関わらないが、機械学習の進み具合や性能をグラフで表示して評価するために用いる。

```shell:bash
$ pip install matplotlib
```

## sklearn [2巻]

2巻では、上記2つに加えてsklearnが必要になる。
(なくてもコードの実行は可能だが、学習にかかる時間が非常に長くなるためインストールした方がいい)
1巻では必要ない。

```shell:bash
$ pip install sklearn
```

## CuPy [2巻・3巻]

2巻・3巻のオプションで、1巻では必要ない。
オプションなのでインストールしなくても構わない(なくても現実的な計算時間で収まる)。
ただし、プログラムを改造するなどして複雑化しようとする場合は導入した方がよい。

CuPyはNVIDIAのGPUを搭載したPCでしか使用できない。

インストール方法は下記の別記事を参照。
https://qiita.com/BARANCE_TW/items/30abf85c55070a2bdc9d

## Pillow [3巻]

Pillowは画像処理用のライブラリである。
色空間を変更したり、2値化したりと画像を加工する機能を持つ。

```shell:bash
$ pip install pillow
```

## Graphviz [3巻]

graphvizはグラフ描画用のツールである。
ここで言うグラフは、matplotlibで描く一般的なグラフではなく、グラフ理論で用いられるエッジとノードからなるグラフのことを指す。

インストール方法は下記の別記事を参照。
https://qiita.com/BARANCE_TW/items/c3f7816d38cc9e746bbd

# サンプルコードのclone

cloneの前に、適当な作業用のディレクトリ(フォルダ)を作成しておく。
以下では、Cドライブ直下に"ai"というディレクトリを作成した場合を想定。
(つまり、`C:\ai`がワークスペースディレクトリになる)

次にリポジトリURLをブラウザで開き、右側にある緑のボタンを押して表示されるclone用のURLをコピーする。
![repo.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/633415/51eb844c-27d0-2ac6-e0f6-8919dbf0d305.png)

各巻のリポジトリは下記。

- 「ゼロから作るDeep Learning」のリポジトリ
https://github.com/oreilly-japan/deep-learning-from-scratch
- 「ゼロから作るDeep Learning 2」のリポジトリ
https://github.com/oreilly-japan/deep-learning-from-scratch-2
- 「ゼロから作るDeep Learning 3」のリポジトリ
https://github.com/oreilly-japan/deep-learning-from-scratch-3

clone URLをコピーしたら、**git bash**を開き、下記の`{clone URL}`のところにコピーしたclone用URLを貼り付けて実行する。
少しすると、サンプルコードが該当ディレクトリにcloneされる。

```shell:bash
$ cd /c/ai
$ git clone {clone URL}
```

# vscodeのインストール

1巻の序盤までは対話式コンソールでも十分なコード量だが、中盤以降は爆発的にコード量とファイル数が増えるので、何かしらの環境を利用することをおすすめする。
ここではvscodeをインストールするが、好きなIDEやエディタがあるのであればそれでも構わないと思う。

vscodeは下記からダウンロードする。

## ワークスペースを開く

vscodeを起動したら、まずはさきほどcloneしたディレクトリをワークスペースとしてopenする。
「ファイル」メニューをクリックし、「フォルダーを開く」を選択する。
(「ワークスペースを開く」ではないので注意)
![workspace1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/633415/0684cfe9-869d-1812-5e7d-670d51083c25.png)

その後、cloneしたディレクトリまで移動して「フォルダーの選択」をクリックすると、ワークスペースが開く。
左側の「エクスプローラー」にcloneしたファイルの一覧が表示されていることを確認する。

## launch.jsonの編集

vscodeでは「Ctrl」+「F5」でコードの実行ができる(または「F5」でデバッグ実行)。
しかし、その際の実行ディレクトリは、デフォルトではワークスペースのルートディレクトリになってしまう。
この状態のままだと、次のような問題が発生する。

- コードが記載されたファイルの場所を起点として記述したfrom・importが想定通りに働かなくなる。
- pickleなどでファイルをread/writeする際のディレクトリが、ワークスペースのルートディレクトリになってしまう。

この問題を解決するために、launch.jsonを編集してファイルのあるディレクトリを実行ディレクトリにする。
まず、左側のアイコンが並んだ場所から「実行」タブを選択し、「launch.jsonファイルを作成します」を選択する。
![launch1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/633415/e41b66b4-7992-23e0-d20f-f8562cb04310.png)

次に、「Select a debug configuration」という表示が現れるので、「Python File」をクリック。
![launch2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/633415/bde261c8-25af-4761-a6d6-2718d6435d53.png)

すると、launch.jsonの編集画面が表示される。
このファイルは、ワークスペースのルートディレクトリ直下にある「.vscode」ディレクトリの中に格納される。
![launch3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/633415/e691c8c0-1810-7e91-a6fd-b3d6fdd58a44.png)

このファイルの「configurations」の値に`"cwd": "${fileDirname}"`という表記を付け加える。
付け加えた後のファイルは下記のようになる。

```javascript:launch.json
{
    // IntelliSense を使用して利用可能な属性を学べます。
    // 既存の属性の説明をホバーして表示します。
    // 詳細情報は次を確認してください: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python: Current File",
            "type": "python",
            "request": "launch",
            "program": "${file}",
            "console": "integratedTerminal", // カンマを末尾に追加
            "cwd": "${fileDirname}" // ここに追加!!
        }
    ]
}
```

これで、「Ctrl」+「F5」で実行時にファイルのあるパスに移ってからプログラムが実行されるようになった。