やってみよう!Google Colabで機械学習の準備

前回は、機械学習を学習するための*1環境として、Google Colabをセットアップしてみました。

今回は、そこで実際に機械学習を実行するための、作業環境を作っていってみたいと、思います。

はじめに

機械学習をするためには、基本的に、CSVファイルを読み込んで、入力データをモデルに読み込ませる必要が、あります。そして、SIGNATEなどのコンペサイトに投稿するためには、学習結果をCSVファイルに出力する必要が、あります。ローカルのJupyter Notebookでやる分には何の問題もないですが、Google Colabでやる分には、ファイルをGoogle ドライブにアップロードしなければならず、また読み込みにも、一仕掛けいります。

今回は、そんなGoogle ドライブを通したPythonのファイル入出力と、ついでに今後必要になってくるであろう以下のやり方について、実際の機械学習に入る前に、整理してみたいと思います。

  • GPUの使い方
  • 追加パッケージのインストール
  • キーボードショートカット
    • とりあえず、Jupyterでよく使っていた、セルの追加・削除、セルの種類の変換あたり。
    • ついで、コード補完のやり方

作業環境の作成

作業ディレクトリの作成

まずは、マイドライブの直下にファイルを置くのもあれなので、作業ディレクトリを作っていきたいと思います。Google ドライブへのアクセスについては、前回の投稿をご参照ください。

なんと、Google ドライブでは、Webアプリであるにも関わらず、右クリックが使えます*2。マイドライブのフォルダ一覧の適当なところで右クリックして、「新しいフォルダ」を選択します*3

f:id:tatsu_mk2:20190407183121p:plain
図1 新しいフォルダの追加

以下のような画面が出てくるので、「colab」と入力し、Google Colab用のルートフォルダにしたいと思います。

f:id:tatsu_mk2:20190407183856p:plain
図2 ルートフォルダの作成

すると、以下のようにフォルダが出来上がるので、出来上がったフォルダをダブルクリックします。Webでダブルクリックとは、斬新・・・

f:id:tatsu_mk2:20190407184240p:plain
図3 作成したフォルダをダブルクリック

colabフォルダを開いたら、同様の手順で、銀行の顧客ターゲティングをする用の「bank」フォルダを、作ります。

f:id:tatsu_mk2:20190407184924p:plain
図4 bankフォルダの追加

最後に、同様の手順で、bankフォルダの下に、CSVファイルを置くための「dataset」フォルダを置きます。また、好み次第ではありますが、図中の赤四角の場所をクリックすれば、以下のような詳細表示に、変わります。

f:id:tatsu_mk2:20190407185511p:plain
図5 datasetフォルダの追加

データファイルの準備

データは、以下の場所から、「学習用データ (train.csv)」「検証用データ (test.csv)」「応募用サンプル (submit_sample.csv)」の三つを、ダウンロードします。

【練習問題】銀行の顧客ターゲティング

ダウンロードするためには、SIGNATEにアカウントを作って、コンペに参加するための参加規約に同意する必要がありますが、ここでは手順は割愛します。一点、独自のアカウントを作らずとも、TwitterやFacebook、Googleアカウントなどでもログインできますが、ランキングサイト等に投稿者名が載ってしまうため、本名でこれらのアカウントを作っているものの、ここでは本名を出したくない人などは、注意が必要です。

データファイルのアップロード

まずは、図5で作った「dataset」フォルダに、移動します。フォルダ名をダブルクリックすれば、移動可能です。

f:id:tatsu_mk2:20190408200037p:plain
図6 datasetフォルダに移動

「ここにファイルをドロップ」とか書いてある適当なあたりで右クリックし、「ファイルをアップロード」を選びます。

f:id:tatsu_mk2:20190408200416p:plain
図7 ファイルアップロードを選択

SIGNATEからダウンロードされた3ファイルを、選択します。

f:id:tatsu_mk2:20190408200753p:plain
図8 ファイル選択

アップロードされました。

f:id:tatsu_mk2:20190408200959p:plain
図9 アップロード完了

早くも容量が0.1GB増えることに・・・
容量対策についてはまた考えよう。

ノートブックの作成

それでは早速、ノートブックを作っていきたいと思います。まずは、赤枠の部分をクリックし、作業ディレクトリに戻ります。ここはクリックなんですね・・・まぁ、Windowsのエクスプローラでも、そうですけど。

f:id:tatsu_mk2:20190408201548p:plain
図10 作業ディレクトリに戻る

戻った先の「dataset」フォルダの下あたりで右クリックし、その他⇒Colaboratoryで新規に追加します。

f:id:tatsu_mk2:20190408201920p:plain
図11 新規Colabolatory追加

開いたら、ファイル⇒名前の変更から、とりあえず「Test」とでも名前を変えておきたいと思います。

f:id:tatsu_mk2:20190408202318p:plain
図12 名前変更

名前欄にカーソルが当たって編集可能状態になり、ここで直接入力して、エーターキーを押すと、名前変更が確定するようです。

f:id:tatsu_mk2:20190408202531p:plain
図13 名前変更後

これでようやく、準備が整いました。

検証してみる

基本的な使い方

基本的には、通常のJupyter Notebook同様、「セル」と呼ばれる箱にPythonコードを入力して、Shift+Enterを押すことにより、プログラムを実行出来ます。ただ、通常のJupyter Notebookと違って、「編集モード」「選択モード」はないみたいで、これのおかげかショートカットキーの設定がちょっと違うみたいです。これは後でまとめたいと思います。

f:id:tatsu_mk2:20190410221905p:plain
図14 基本的な使い方

ファイルを読み込んでみる

それでは、早速やっていってみたいと、思います。Google Colabでは、pandasでpd.read_csv()としてCSVを読み込む前にまず、以下のように、Google ドライブをマウントする必要が、あるみたいです。

from google.colab import drive
drive.mount('/content/gdrive/')

f:id:tatsu_mk2:20190408220004p:plain
図15 gdriveのマウント

マウントを実行すると、以下のように、「/content」というディレクトリがカレントディレクトリになっているみたいです。

!pwd
!ls
%cd ./gdrive
!pwd
!ls

f:id:tatsu_mk2:20190408221600p:plain
図16 ディレクトリの確認

なので、図4で作った「bank」フォルダに、移動してみたいと思います。

%cd ./My\ Drive/colab/bank
!pwd
!ls

f:id:tatsu_mk2:20190408222429p:plain
図17 作業ディレクトリに移動

移動できたみたいなので、直下のdatasetディレクトリから、train.csvを読み込んで、head()してみたいと思います。

import pandas as pd
train = pd.read_csv("./dataset/train.csv")
train.head()

f:id:tatsu_mk2:20190408223017p:plain
図18 CSV読み込み

出来ました!!!

ファイルを書き出してみる

ここまでいけば特に問題ないかと思いますが、一応、to_csvでCSV出力してみたいと思います。

train.to_csv("./test_out.csv")

f:id:tatsu_mk2:20190408223408p:plain
図19 CSV書き出し

Google ドライブの方を見てみると、問題なく出力できていました*4

f:id:tatsu_mk2:20190408223711p:plain
図20 CSV出力確認

GPUの使い方

Google Colabの目玉と言えば無料でGPUが使えることですが、具体的な使い方としてはまず、ランタイム⇒ランタイムタイプの変更を、選びます。

f:id:tatsu_mk2:20190410222647p:plain
図21 GPUの利用その1

その後、ハードウェアアクセラレータから、GPUを選びます。

f:id:tatsu_mk2:20190410222958p:plain
図22 GPUの利用その2

・・・TPU?

GPUだけじゃなく、TPUも使えるみたいです。Googleが開発した、Tensor Processing Unitの略のあれですね。ぱっとぐぐった感じ、その名の通り、TensorFlow使って畳み込みニューラルネットワーク(CNN)やるときは、早くなるみたいです。

追加パッケージのインストール

上の方でも書きましたが、Google Colabの場合、!に続けてUnixコマンドを打つことができます。なので、以下のように、!に続けてpipコマンドを打つことで、任意のパッケージを、追加インストールすることが出来ます。以下は試しに、LightGBMを追加インストールしてみたところです。

!pip install lightgbm
import lightgbm as lgb
model = lgb.LGBMClassifier(random_state=1234)

f:id:tatsu_mk2:20190410224326p:plain
図23 パッケージの追加インストール

なんか、ローカルでインストールするよりは早い感はありますが、問題は、毎回コレをやらなければならない点です。インストール済みの環境を取っておくことは、出来ないようなので、ちょっとめんどくさいかも、しれません。

キーボードショートカット

上の方でも書きましたが、Google Colabではセルの選択モードが無い代わりに、Ctrl+Mを押すことにより、セル操作のキーボードショートカットが出来ます。例えば、上にセルを挿入するには以下のように、Ctrl+M Aを押します。

f:id:tatsu_mk2:20190411220949p:plain
図24 セルの挿入

同様に、Ctrl+M Bで下にセルが挿入され、Ctrl+M Dでセルを削除することが出来ます。また、「ツール⇒コマンド パレット」からキーボードショートカットを確認でき、例えばプログラムを入力するためのコードセルから、メモを入力するためのテキストセルに変換するには、Ctrl+M Mを押せば良いことが、分かります。ちなみに、テキストセルをコードセルに変換するには、Ctrl+M Yを押します。

f:id:tatsu_mk2:20190411222211p:plain
図25 セルの形式を変換

コード補完のやり方

最後に、コード補完についてです。通常のJupyter Notebookだと、nbextentionsを入れることによりコード補完が有効になりますが、Google Colabど最初から有効なようです。TabキーまたはCtrl+スペースを押すことにより、補完が表示されます。ただ、ネットワークを介しているためか、ローカルのJupyter Notebookと比べると、Tabキーを押して候補ウィンドウが出るまで、少しもっさりしています。

f:id:tatsu_mk2:20190411223301p:plain
図26 コード補完例

おわりに

いかがだったでしょうか。今回やってみて分かりましたが、一見デメリットが無いように思えたGoogl Colab、以下などは使うにあたり、注意が必要かなと思いました。

  • ネットワークを介しているためか、ちょっとしたコマンドを実行して帰ってくるまでが、ローカルよりちょっと遅い。
  • 環境を取っておけない。LightGBMなど、デフォルトでインストールされていないパッケージは、毎回インストールする必要がある。
  • ファイルI/Oは基本的にGoogle ドライブ経由。毎度マウントして、認証コードを貼らないといけない。
  • 同じく、Google ドライブの容量を消費するため、データセットの容量管理には注意が必要。

というわけで、ようやく環境の整理も出来たので、次回からようやく、銀行の顧客ターゲティングについて考えていってみたいと、思います。最後まで読んでいただいて、ありがとうございました。

*1:ややこしい・・・

*2:スプレッドシートなどに比べれば、驚くべきことではないかもしれませんが・・・

*3:iPadだと、長押しかマルチタップで出てくるのかな・・・新規ボタン押せば、確実に出てきますが。

*4:とりあえず出力できましたし、2MBもったいないので、このファイルはすぐに消しときます。