『ゼロから作るDeepLeaning』をGoogleColaboratoryで学ぶための準備

こんにちは！GASを使った業務効率化に夢中の初心者プログラマー、太郎です！
最近、GASから離れて機械学習の勉強をしています。最初に選んだ本はオライリージャパンさんから出版されている『[ゼロから作るDeepLearning～Pythonで学ぶDeepLearningの理論と実装](https://www.amazon.co.jp/%E3%82%BC%E3%83%AD%E3%81%8B%E3%82%89%E4%BD%9C%E3%82%8BDeep-Learning-%E2%80%95Python%E3%81%A7%E5%AD%A6%E3%81%B6%E3%83%87%E3%82%A3%E3%83%BC%E3%83%97%E3%83%A9%E3%83%BC%E3%83%8B%E3%83%B3%E3%82%B0%E3%81%AE%E7%90%86%E8%AB%96%E3%81%A8%E5%AE%9F%E8%A3%85-%E6%96%8E%E8%97%A4-%E5%BA%B7%E6%AF%85/dp/4873117585)』！（本当に初学者向けかは不明・・・）
この本では、基本的にanacondaを使ってローカルな環境で開発することが想定されているのですが、クラウド上で出来ると楽だなと思い、GoogleColaboratoryで動かしてみることに決めました。
ほとんどは同じコードで動くのですが、いくつか変更しなければならないところがあったため、初学者の方向けにその方法をまとめておきたいと思います。

## そもそもGoogleColaboratoryとは？
Googleが**無料**で提供してくれている、機械学習のための開発環境です。特徴は以下

* JupyterNotebookに似たインターフェース（つまり使いやすい）
*  主要なライブラリがインポート済み（つまり使いやすい）
*  GPUが無料で使える（CPUよりも計算速度がバリ早い）

などなど、初学者やハイスペックなPCを持たない人が簡単に機械学習に触れられるような環境となっているのです。しかも**無料！！！**
まだ開発環境についてあまり詳しくないので、他のデメリットとか、AIアプリを開発するときに使えるのかなどは分からないのですが、、、とりあえず機械学習を勉強してみたい！という方には非常にお勧めです！！！

## githubからサンプルファイルをダウンロードする
そんなわけで、ゼロから作るDeepLearningをGoogleColaboratory上で勉強するための準備をしていきましょう。
まずは、[オライリージャパンのGitHub](https://github.com/oreilly-japan/deep-learning-from-scratch)にアクセスし、ソースコードをダウンロードします。
そして、CodeのところからZIPファイルをダウンロードします。
![スクリーンショット (122)_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108046/968cc9d1-e012-3f02-e4ed-bd73928e79c9.jpeg)
ダウンロードしたファイルは解凍しておきましょう。
## ダウンロードしたファイルをGoogleDriveにアップ
次にドライブに解答したフォルダをアップロードします。
![スクリーンショット (123).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108046/12879b38-79c2-d824-7142-1b02deef6fb0.png)
これだけです。
##ドライブをマウントする
ここからが少し特殊です。マイドライブ上で良いので、GoogleColaboratoryのファイルを一つ作成しましょう。
![スクリーンショット (124).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108046/08e76984-052e-474e-d212-2318dd7f46f7.png)
ただ、このままだとドライブにある他のファイルにアクセスができないので**マウント**という作業をします。
このようなコードを書いてセルを実行しましょう。
![スクリーンショット (125).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108046/41aada6d-f832-23a8-1ff0-2e46bf01edca.png)
実行すると、「このURLにクリックしなさい」と求めらます。
![スクリーンショット (127).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108046/9a281aa0-1748-0410-9c23-1773a79a6a4c.png)
クリックして、使用するアカウントを選択、「許可」を押すとマウントするためのコードが発行されます。
![スクリーンショット (131)_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108046/2fdad3ba-193a-f120-3246-ff73d21f787f.jpeg)
このコードを入力すれば、マウント完了です！
画面の左側のフォルダを開くと、MyDriveと表示されていることも確認しましょう。
![スクリーンショット (135).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108046/48834005-b349-f6dc-da6d-04b582e812c8.png)
ちなみに、接続が切れるたびに、このマウントは実行する必要があります。
## ファイルへのパスを通して、モジュールをインポート
ダウンロードしたファイルの階層はざっくりこんな感じです。

```
deep-learning-from-scratch-master
  ├── ch01
  ├── ch02
  ・
  ・
  ・
  ├── ch08  
  ├── common
  │　　 ├── function.py
  │　　 ├── gradient.py
  │　　 └── 他
  └── dataset
      ├── minst.py
      └── 他
```

機械学習に使用するデータセットをダウンロードするには、mnist.pyの中のload_mnist関数をインポートする必要があります。

本の中では、sysとosライブラリをインポートして以下の様にモジュールをインポートしています。

```python
import sys, os
sys.path.append(os.pardir)
from dataset.mnist import load_mnist
```

colaboratory上だと上記のpathではインポートが出来ません。
osを使わずに以下の様に記述します。

```python
import sys
sys.path.append('/content/gdrive/My Drive/deep-learning-from-scratch-master/dataset')
from mnist import load_mnist
```
※『deep-learning-from-scratch-master』フォルダがマイドライブの直下にある場合
『common』フォルダにある他のpyファイルも同様にパスを通せばアクセスできます！

他の書き方もきっとあるのでしょうが、上記の部分を変更してあげれば、名著『ゼロから作るDeepLearning』をGoogleColaboratory上で学習することができます！

以上、参考になれば嬉しいです！

## 追記:インポートしたいモジュールの中にも他のファイルを参照する記述がある場合
モジュールの中にも他のファイルを参照する記述がある場合、上手く動かなくなります💦
その場合、該当のpyフォルダのファイルパスの部分をGoogleColaboratoryでの表記に変更し、変更したpyファイルをアップロードすれば、参照できるようになりました。
例えばこんな感じです。
**【変更前】**

```python
import sys, os
sys.path.append(os.pardir)  # 親ディレクトリのファイルをインポートするための設定
import numpy as np
from collections import OrderedDict
from common.layers import *
from common.gradient import numerical_gradient
```
**【変更後】**

```python
import sys
sys.path.append('/content/gdrive/My Drive/GoogleColabo/0karaDeepLearning/common')
import numpy as np
from collections import OrderedDict
from layers import *
from gradient import numerical_gradient
```

変更しなければならないpyファイルは『commonフォルダ』内の、`layers.py`、`multi_layer_net.py`、`multi_layer_net_extend.py`、`trainer.py`の4つです。あとのpyファイルはせいぜいnumpyくらいしかインポートしてないので、修正いらずです。

きっともっといいやり方があるのだろうな～～～と思うので、やり方が分かる方がいれば教えてください>_<