fastbookのサンプルコード(02_production.ipynb)をGoogle Colabで試してみた Part 1

仕事の傍らディープラーニングを勉強してきたが、いつまでもMNIST系の文字や画像の分類のあたりで足踏み状態で、何か実用的なことやるにはちゃんと理解できていないなと気づいて、[fast.aiが提供するフリーコース:Practical Deep Learning for Coders](https://course.fast.ai/)に挑戦することにしました。

※ 本記事で使っている[サンプルコード](https://github.com/fastai/fastbook)は、関連書籍の出版社であるO'REILLY社の厚意によりにより公開されているものだそうです。
## サンプルコードのローカルリポジトリ
私の場合はGoogleドライブのサブディレクトリ「Colab Notebooks」の直下に「fastai」というサブディレクトリを作成して、そこにコースで使用されるマテリアルのローカルリポジトリを置いています。ローカルリポジトリの作成や更新については、別の記事「[Colabからfastbookのサンプルコード・リポジトリをGoogleドライブにclone/pullする](https://qiita.com/kumagorou/items/4a1bccd311eb1eb62cdb)」で解説していますのでご覧ください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407748/ade09e7b-d8f1-04cc-c32b-99d0e661115d.png)
### 学習に使うサンプルコードとその実行方法
サンプルコードを使って学習する際は、私はローカルリポジトリを直接使わず、自分の学習用ディレクトリ「FastAI」を別に作成して、そこにローカルリポジトリの「clean」というサブディレクトリから必要なものをコピーしています。私はコースマテリアルを使うだけで開発する者ではないので、fast.aiの推奨に従ってそうしています。

ちなみに、「clean」サブディレクトリにあるサンプルコード(ipynbファイル)は、見た感じ本体のファイルから書籍の作成に使う余分なコメント(Markdown)を落としたもののようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407748/d07fb73a-4f99-189a-5b7f-9106fcf1c193.png)
Google Colabでサンプルコードを実行するには、実行したいファイルをマウスで右クリックして「アプリで開く」→「Google Colaboratory」を選択するだけです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407748/8ce5be7a-30b7-7535-a81b-2ed47a24eb4d.png)
※ もし「Google Colaboratory」が表示されない場合は、CQ出版のサイトの記事「[AI自習ドリル　Google Colabの使い方](https://interface.cqpub.co.jp/ail01/)」を参考にしてください。
## サンプルコード(02_production.ipynb)の実行
早速、lesson 2のサンプルコード[02_production.ipynb](https://github.com/fastai/fastbook/blob/master/02_production.ipynb)をGoogle Colaboratory上で試しましたが、そのままでは正常に動作しなかったので、修正点を紹介します。

この記事を書いている時点(2020/12/18)では問題の個所のコードは下記のとおりです。

```python:
   results = search_images_bing(key, 'grizzly bear')
   ims = results.attrgot('content_url')
   len(ims)
```

コードから察するに、リスト変数imsに検索した画像のURLが文字列で格納されているはずだが、どういう内容が格納されているのか確認するつもりで、print文で変数の中身を見たら、あらビックリ、すべてNoneとなっています:open_mouth:

この先のセルで熊の画像がちゃんと表示されるのになぜなのか調べたら、後のセルでリスト変数imsに直接URL文字列が代入されていました:relaxed:

```python:
#hide
ims = ['http://3.bp.blogspot.com/-S1scRCkI3vY/UHzV2kucsPI/AAAAAAAAA-k/YQ5UzHEm9Ss/s1600/Grizzly%2BBear%2BWildlife.jpg']
```
解説によれば、死んだ熊など子供に見せるのは良くない画像もあるということすが、・・・！？
そういうことで、元情報を持つはずの変数resultsを表示してみたら、下記のとおりになっていた。~~Bing Image Search APIのインタフェースがバージョンアップされたのかもしれません.~~　（単純なスペルミスなのかもしれません:sweat:　もう少し後のセルを見たらちゃんとできてました。　トホホ:fearful:）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407748/33cbc779-5bf8-89d3-0fa5-accb872d8891.png)
そこで下記のように修正しました。

```python:
results = search_images_bing(key, 'grizzly bear')
#ims = results.attrgot('content_url') 
ims = results.attrgot('contentUrl') # 属性名が変わった?
len(ims)
```
改めて中身を確認すると期待通りの中身になりました:heart_eyes:　これでims[0]以外の画像サンプルも使えるようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407748/ad4edb91-9982-fcf6-a8ee-177263f4dd16.png)
fastbookのサンプルコードは頻繁に更新されており、このサンプルコードも、最初に投降した日のつい1日前に更新されたようで、大幅に内容が増加しています。まさに常に成長している学習材料です。

ちなみに、画像サンプルの検索は、何かトラブルがあれば「DuckDuckGo」を使う方法もあるという紹介があります。
　　[Bing Image Search APIを使わない方法](https://course.fast.ai/images)

また、Google画像検索を使った方法については、fast.aiのコースマテリアルになっているものがあります。
　　[lesson2-download.ipynb: Creating your own dataset from Google Images](https://github.com/fastai/fastai/blob/master/dev_nbs/course/lesson2-download.ipynb)
ここには、データの収集からモデルの学習、評価まで、一連の流れがあります。
## fast.ai 公式ページ/Github
[fast.ai](https://www.fast.ai/)
[https://github.com/fastai](https://github.com/fastai)
[https://github.com/fastai/fastbook](https://github.com/fastai/fastbook)

## 関連記事
[fastbookのサンプルコード(02_production.ipynb)をGoogle Colabで試してみた Part 2](https://qiita.com/kumagorou/items/dbc63e9706f6729051be)
[fastbookのサンプルコード(02_production.ipynb)をGoogle Colabで試してみた Part 3](https://qiita.com/kumagorou/items/3d547cae6b41d1ea90d3)
[Colabからfastbookのサンプルコード・リポジトリをGoogleドライブにclone/pullする](https://qiita.com/kumagorou/items/4a1bccd311eb1eb62cdb)
[fast.aiで作るハンドメイドの超簡単な手書き数字判別器](https://qiita.com/kumagorou/items/dab8200d41f1714587b8)