賢くなりたいトイプードルの日記

データサイエンス系の話をメインにしていきます

Jupyter Notebookを導入すれば機械学習が超絶くくるって話

pythonを使っているひとでJupyter Notebookを知らないひとはいないでしょう。

Jupyter Notebookを使うとブラウザ上で全部できるので、機械学習がめちゃくちゃ括ります。

今回はJupyter Notebookのインストール方法から使い方、TensorFlowとTensorBoardをざっくり解説していきます。

pythonの開発環境が整っていることを前提とします

Jupyter Notebookのインストール方法

インストールの方法はとても簡単。

$pip install jupyter

$pip install ipython

で完了です。

立ち上げたいときは、

$jupyter notebook

もしくは

$ipython notebook

でおっけーです。簡単ですね。

するとブラウザでJupyter Notebookが立ち上がるので、

Files→New→Python3

と選択してあげると、新しくPython3の実行環境が立ち上がります。これで準備完了です。

Jupyter Notebookの使い方

”In[ ]: ”の横に、以下のようなプログラムを書きます。

import numpy as np import matplotlib.pyplot as plt %matplotlib inline

x = np.random.rand(100) y = np.random.rand(100)

plt.scatter(x, y)

plt.title("scatterplot") plt.xlabel("x") plt.ylabel("y")

plt.show()

これを入力して、上のバーにあるRunボタンをクリックするか、Shift + Enterで実行できます。

%matplotlib inlineの部分でJupyter Notebook上にmatplotlibのグラフを表示させます。

※ちなみに最後のplt.show()はJupyter Notebookではなくても良いのですが、他の環境ではなくてはならないので一応つけておきます。

この後のIn[ ]:に書いていくと、前のプログラムの続きを書いていくことになります。

もし以前までのデータを消して新しく始めたいときは、

%reset

と入力して実行すると、

Once deleted, variables cannot be recovered. Proceed (y/[n])?

一回消すと、もう変数を元に戻せませんがそれでも続けます?と聞かれるので、

y

と入力してEnterを押すと一からのプログラムになります。

また、jupyter notebookは実行速度を確認することもできます。

%timeit np.radians(24)

このように書いて出力すると、

1.31 µs ± 61.3 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

となります。似た関数の出力速度をこれで調べて、速い方を使うと良いでしょう。

TensorFlowとTensorBoardの導入方法と使い方

ある日ワールドビジネスサテライトを見ていたら、無人レジサービスをTensorFlowとKerasで作っていると聞きました。しかもプログラミングの経験がほとんどない人が作ったのだとか。

これはエンジニアの端くれである自分も触ってみなければと思ったのですが、なかなか開発環境を整えることができません。でもなんとか二日くらいかけてTensorFlowとTensorBoardの環境を整えることができ、また超簡単な使い方がわかったのでここにその奮闘記を記します。

TensorFlowって?

TensorFlowは、Googleが2015年11月にオープンソース公開した、数値計算ライブラリです。

ファイルで計算処理を書き、それをアウトプットしてできたログを、付随しているTensorBoardというので読み込むと同時にサーバーをたて、ブラウザでlocalhost:6006にアクセスすると、

こんな風にスカラを書いてくれたりします。他にもヒストグラム等グラフや

ノード間の関係性もみることができ便利だし楽しいです。この画面でいろいろと遊べて、初めて触ったときは感動しました。しかもこれ、jupyter notebook上でできてしまいます。こりゃあすげえ。もう全部ブラウザ上でできてしまうというのは本当に便利。

TensorFlowはビッグデータ機械学習にも使える優れものなので、ぜひ触ってみてください。

TensorFlow導入は割と簡単

開発環境を整えることにあまり慣れていないというかたは、普通に

pip install tensorflow

で良いと思います。もちろん仮想環境上にインストールした方が他の環境を汚さなくて良いし、できればGPUを利用する設定もしたほうが良いのは良いとは思うのですが、「機械学習を学びたい!」という熱が下がってしまうのが一番勿体無い。だからシンプルにpip installすれば良い。

インストールできたら.pyのファイルを作って、

import tensorflow as tf

a = tf.constant(2, name='A')
x = tf.Variable(0, name='X')
y = tf.multiply(a, x, name='Y')
z = tf.multiply(y, y, name='Z')

x_incrementer = tf.assign(x, x + 1, name='X_INCREMENTER')
sess = tf.InteractiveSession()

merged = tf.summary.merge_all()
if tf.gfile.Exists('./logir'):
tf.gfile.DeleteRecursively('./logir')

writer = tf.summary.FileWriter('./logdir', sess.graph)

tf.global_variables_initializer().run()

for i in range(3):
summary, result = sess.run([merged, y])

writer.add_summary(summary, i)

print(result)
sess.run(x_incrementer)

と書いてpython3で実行して、024と出力されれば走っていると思います。

TensorBoardのscalarsが表示されない

TensorFlowが上手く走って

「よっしゃこれで機械学習ガンガン勉強していくぞ」

と思って次はTensorBoradを使って楽しくデータ解析していこうなんて思ったので、

まず

$python3 〜.py

でファイルを読み込んで

$tensorboard --logdir=./logdir

でTensorBoard用のサーバーを立て、ブラウザでlocalhost:6006とURLを入力すると、ファイルに書いたものが美しいMain Graphで可視化されていて、TensorBoardが問題なく表示、されていると思ったのですが、SCALARSが表示されません。(ちなみに--logdir= の右側にはファイルを実行すると生成されるlogdirフォルダのパスを書きます。僕の場合だと、カレントディレクトリからすぐのところにlogdirフォルダが生成されるので、./logdirでOKなはずなのですが、、、)

実際にSCALARSを見てみるとこんな感じ。

No scalar data was found.

Probable causes:

    • You haven’t written any scalar data to your event files.

  • TensorBoard can’t find your event files.

って言われるのですが、scalar dataは普通に書いているので二行目のやつに該当するのだろう、ということでTensorBoardがイベントファイルを見つけられていないですよ、という問題を解決することに。

イベントファイルってファイルを実行するたびにlogsフォルダ以下に生成されるevents.out.~~~っていうファイルのことなんだろうけど、これをTensorBoardが見つけられていないみたい。頼むから見つけてくれ。--logdir= の右側を絶対パスにしてみたりしても変化なし。

調べてみると、スカラ量を出力するためのプログラムを書かなければいけないらしい。そんなの当たり前何だろうけど、まあはじめはわからん。

結論になりますが、tensorflowでスカラーを表示させるには、tf.summary.scalarってやつがいるらしい。

sess = tf.InteractiveSession()の下に

tf.summary.scalar('X_SCALAR', x) tf.summary.scalar('Y_SCALAR', y) tf.summary.scalar('Z_SCALAR', z)

というのを追加するとスカラがみれるようになります。

※TensorBoardの基礎的な使い方についてはこちらを参考にさせていただきました。

コードをいじってTensorBoardを立ち上げると上手く行かない

という問題が発生しましたが、これはtensorflow用のファイルを実行する度に作られるlogdir以下のファイルを消した後にまたファイルを実行して、その後にTensorBoardのサーバーを立ち上げれば上手く行きました。

次はscikit-learnが読み込まれなくなった

scikit-learnをインストールした直後にテストで実行させてみた時には普通にいけたのに、その後tensorflowの開発環境を整えたりしてもう一度scikit-learnが実行できるかやってみると、

ImportError: bad magic number in 'sklearn': b'\x03\xf3\r\n'

とか言われます。magic numberって厨二っぽい名前だ。調べてみると、

find ~ -name '*.pyc' -delete

というコマンドで古いコンパイルファイルを削除すれば問題解決しました。

要するに、最初のテストではpython2.7でscikit-learnをimportしていて、今回python3でscikit-learnをimportしたために、前のコンパイルファイルとの競合が起こったということみたいです。

まとめ

問題が起こるとせっかくの学習熱が無駄になってしまうので、結局は人に対面で教えてもらうのが一番効率が良い。それでだいたいのやり方がわかったら、あとはGoogle大先生に聞けばなんとかなるようになります。

特に環境構築が上手く行かないと何もできないので、プログラミング初心者の方はこれから学ぶものの環境がどんな構造をしているのかや、コマンドについての基礎知識を対面で学ぶのが良いと思います。

時代はAI、そしてIoT。シンギュラリティ(人口知能が人間の全知性を上回る日)は2045年に来るというのが研究者たちの大方の見解ですし、自動運転車が普及する日もすぐそこまで来ています。タクシーやバスの運転手さんたちはどうなってしまうのでしょうか。機械学習、勉強しておいて損はないどころか必須かもしれません。

Tech BoostではAIやIoT、ブロックチェーンなどの最先端技術を学ぶことができます。

3ヶ月間のプログラミングスクール【Tech Boost】