デジタル・デザイン・ラボラトリーな日々

アラフィフプログラマーが数学と物理と英語を基礎からやり直す。https://qiita.com/yaju

WindowsユーザーがTensorFlowをインストールしてみた(AWS EC2 Docker版)

はじめに

静岡Developers勉強会では「人工知能ハンズオン」を2016/4/23に開催します。自PC(Windows 10 Home 64bit)にDockerを使ってGoogleが提供しているオープンソース人工知能ライブラリ「TensorFlow」を入れて動かすことが出来たのですが、Dockerって64bit版のみで32bit版がありません。
勉強会なので32bit PCしか持っていない人をどうしようかと思ったら、あるじゃないですか? そう、クラウドならね。

環境

1年間の無料枠で構築

  • Amazon Linux AMI 2016.03 (HVM), SSD Volume Type 64ビット
  • t2.micro

AWS EC2の登録

AWS EC2の登録は長くなるので別記事にしました。DockerとTensorFlowの導入まで記事がかぶってますが・・・ qiita.com

Dockerのインストール

下記サイトを参考にDockerをインストールしました。
EC2にDockerをインストールしてNginxコンテナを作る

Dockerをインストール

sudo yum install -y docker

Dockerを起動

$ sudo service docker start
Starting cgconfig service:                                 [  OK  ]
Starting docker:

ec2-userをdockerグループに追加

$ sudo usermod -a -G docker ec2-user
$ cat /etc/group |grep docker
docker:x:497:ec2-user

グループに追加されていることを確認したら、一度ログアウト(exit)して再度ログインしてください。

dockerグループに所属していれば、sudoなしで ec2-userから Dockerコマンドが使えます。

docker info
  ︙
Kernel Version: 4.4.5-15.26.amzn1.x86_64
Operating System: Amazon Linux AMI 2016.03

DockerにTensorFlowのインストール

TensorflowのサイトのDocker installationにインストールする方法が記載されています。ポートは指定しました。

$ docker run -p 8888:8888 -p 6006:6006 b.gcr.io/tensorflow/tensorflow
         ︙
[I 08:48:55.427 NotebookApp] The Jupyter Notebook is running at: http://[all ip
addresses on your system]:8888/
[I 08:48:55.427 NotebookApp] Use Control-C to stop this server and shut down all
 kernels (twice to skip confirmation).

記載のコマンドを入力するとtensorflowがインストールされていきます。
WebブラウザでdefaultマシンのIPアドレスにポート番号8888を付ければ、Notebook(Jupyter)が動作するとなっています。

Jupyter Notebookの起動

Webブラウザで「http:(パブリックIP):8888/」と入力するとJupyter Notebookが起動されました。
AWS EC2のパブリックIPを指定して下さい。

TensorFlowのサンプル確認

DockerのTensorFlowには、下記のサンプルが最初から用意されています。

  • 1_hellow_tensorflow.ipynb
  • 2_getting_started.ipynb
  • 3_minst_from_scratch.ipynb

※DockerのTensorflowはPython2用となります。

f:id:Yaju3D:20160407003301p:plain

TensorBoradの確認

yaju3d.hatenablog.jp

このサイトの「TensorBoardによる可視化」にあるソースを入力します。
※その上にあるdef x2_plus_b(x, b)関数も入力が必要です。

f:id:Yaju3D:20160407003353p:plain

実行するとlogフォルダが作成されます。 次に右横の「New」で「Terminal」を作成します。

f:id:Yaju3D:20160407003452p:plain

Terminalにて、下記コマンドを入力します。

# tensorboard --logdir=log                                                                                                                                    

f:id:Yaju3D:20160407003516p:plain

これでWebブラウザで「http:(パブリックIP):6006/」と入力すると「TernsorBorad」が表示されます。 f:id:Yaju3D:20160407004805p:plain

※最初にグラフが「No scalar summary tags were found.」のエラーで表示されなかったのですが、Dockerをリスタートしたら表示されるようになりました。

$ docker ps
CONTAINER ID        IMAGE                            COMMAND             CREATED             STATUS              PORTS                                            NAMES
cea774063516        b.gcr.io/tensorflow/tensorflow   "/run_jupyter.sh"   31 hours ago        Up 31 hours         0.0.0.0:6006->6006/tcp, 0.0.0.0:8888->8888/tcp   thirsty_kare
$ docker stop thirsty_kare
$ docker start thirsty_kare

TensorBoradの停止

Runningタブにて該当Terminalの「Shutdown」ボタンをクリックすれば停止します。 f:id:Yaju3D:20160407003537p:plain

WindowsユーザーがTensorFlowをインストールしてみた(Docker版)

はじめに

静岡Developers勉強会では、今年の勉強会のテーマとして「人工知能ハンズオン」を2016/4/23に開催します。 以前、TensorFlowを自PC(Windows 10 64bit)にインストールした記事を書きました。 yaju3d.hatenablog.jp

ですが初心者の人には敷居が高いかと思い、もっと簡単な方法がないか模索していました。
ネットで「Tensorflow Windows インストール」で検索すると、Dockerなら簡単だよというのが見つかるのですが、Dockerってクラウドで使うものだと思い込んでいたために見逃していました。
Dockerを調べるとクラウドでなくても使えることが理解できたので、今回Dockerを使ってのTensorflowのインストールに挑戦してみました。

※Dockerを使用するにはPCが64bitである必要があります。

qiita.com

環境

  • Windows 7 Professional 64bit
  • DockerToolbox 1.10.3
  • VirtualBox 5.0.16

DockerToolboxのインストール

DockerのオフィシャルサイトのDocker ToolboxからDocker Toolboxのインストーラを入手します。このインストーラにはVirtualBoxやGit for Windowsが同梱されてます。

自分はチェックボックスなど気にせずデフォルト状態のままインストールしました。

Docker用の仮想マシンを構築

Docker Quickstart Terminalを起動します。初回のみVirtualBox上にDocker用の仮想マシン(default)を生成します。 その後、Dockerエンジンが動作しているDockerホストの仮想マシンに接続されます。 VirtualBoxを開くとdefaultインスタンスが出来ていることが確認できます。

自PCのWindows 10 Home 64bitではDocker Quickstart Terminalでエラーになりました。その顛末は下記ブログに書いています。 qiita.com

Dockerの動作確認

$ docker-machine ls
NAME      ACTIVE   DRIVER       STATE     URL                         SWARM   ERRORS
default   *        virtualbox   Running   tcp://192.168.99.101:2376

URLにあるIPアドレスは後で入力するので覚えて置いてください。
ちなみにIPアドレスだけを知りたい場合は下記となります。

$ docker-machine ip
192.168.99.100

DockerにTensorFlowのインストール

TensorflowのサイトのDocker installationにインストールする方法が記載されています。

$ docker run -it b.gcr.io/tensorflow/tensorflow
         ︙
[I 08:48:55.427 NotebookApp] The Jupyter Notebook is running at: http://[all ip
addresses on your system]:8888/
[I 08:48:55.427 NotebookApp] Use Control-C to stop this server and shut down all
 kernels (twice to skip confirmation).

記載のコマンドを入力するとtensorflowがインストールされていきます。説明の通りだとWebブラウザでdefaultマシンのIPアドレスにポート番号8888を付ければ、Notebook(Jupyter)が動作するとなっています。

自分はこの通りに入力したのですが、Webブラウザで「http:192.168.99.100:8888/」を入力しても、「このサイトにアクセスできません」のエラーでどうすることも出来なかったため、Control-Cを押すしかありませんでした。

Jupyter Notebookの起動

ネットで調べるとポートを指定するようなことが書かれていました。
How do I start tensorflow docker jupyter notebook

$ docker run -p 8888:8888 -p 6006:6006 b.gcr.io/tensorflow/tensorflow
         ︙
[I 08:48:55.427 NotebookApp] The Jupyter Notebook is running at: http://[all ip
addresses on your system]:8888/
[I 08:48:55.427 NotebookApp] Use Control-C to stop this server and shut down all
 kernels (twice to skip confirmation).

これでWebブラウザで「http:192.168.99.100:8888/」と入力するとJupyter Notebookが起動されました。
※IPアドレスは、Dockerの動作確認した際のURLとなります。

TensorFlowのサンプル確認

DockerのTensorFlowには、下記のサンプルが最初から用意されています。

  • 1_hellow_tensorflow.ipynb
  • 2_getting_started.ipynb
  • 3_minst_from_scratch.ipynb

※DockerのTensorflowはPython2用となります。

f:id:Yaju3D:20160407003301p:plain

TensorBoradの確認

yaju3d.hatenablog.jp

このサイトの「TensorBoardによる可視化」にあるソースを入力します。
※その上にあるdef x2_plus_b(x, b)関数も入力が必要です。

f:id:Yaju3D:20160407003353p:plain

実行するとlogフォルダが作成されます。 次に右横の「New」で「Terminal」を作成します。

f:id:Yaju3D:20160407003452p:plain

Terminalにて、下記コマンドを入力します。

# tensorboard --logdir=log                                                                                                                                    

f:id:Yaju3D:20160407003516p:plain

これでWebブラウザで「http:192.168.99.100:6006/」と入力すると「TernsorBorad」が表示されます。 f:id:Yaju3D:20160407004805p:plain

TensorBoradの停止

Runningタブにて該当Terminalの「Shutdown」ボタンをクリックすれば停止します。 f:id:Yaju3D:20160407003537p:plain

ホストとファイル共有

Dockerはプロセス内にコンテナを生成するので、コンテナ内にファイルを保存してもPC再起動等でプロセスが消えるとコンテナも破棄されます。下記方法でホスト側のフォルダをマウントしておくことでコンテナが破棄されてもファイルが消えることがなくなります。

ホスト側(C:\Users(ユーザー名))の配下に「tensor_share」フォルダ(例)を作成したとします。

$ docker run -d -p 8888:8888 -p 6006:6006 -v /c/Users/(ユーザー名)/tensor_share:/notebooks b.gcr.io/tensorflow/tensorflow

PWDコマンドを使うとカレントディレクトリを取得できます。

$ echo $PWD
/c/Users/(ユーザー名)

$ docker run -d -p 8888:8888 -p 6006:6006 -v $PWD/tensor_share:/notebooks b.gcr.io/tensorflow/tensorflow

qiita.com

WindowsユーザーのTensorFlowことはじめ

はじめに

静岡Developers勉強会では、今年の勉強会のテーマとして「人工知能ハンズオン」を予定しています。
前記事にて、自PCに「TensorFlow」をインストールしてみました。
インストールしただけで、「TensorFlow」がどういったものなのかをまったく理解出来ていません。
ネットで検索した幾つかのサイトを参考にこれから理解していこうと思います。

Pythonの入門として、勉強会仲間であるUsekさんの記事を参考にするといいでしょう。
qiita.com

エディタについて

TensorFlowはPythonを使ってプログラムしていくのですが、エディタが無いことにはプログラムを組みにくいですよね。
以前、静岡Developers勉強会で「実践コンピュータービジョン」を行った際、Python向け統合環境(IDE)の「PyCharm」を使っていました。
その後、もう少し手軽なものとして「IPython Notebook」というPythonのコードを含んだWebページを作成できるものを教わったので、今回はこちらを使用していきます。

IPython Notebookは、その後に多言語対応したこともあって、「Jupyter」という名前に変更されていました。

Jupyter Notebook(IPython)のインストール

下記サイトを参考に「Jupyter Notebook」をインストールしました。
www.task-notes.com

※Anacondaでは最初からインストール済みなんですが、自分はTensorFlow専用の環境(tensorenv)を作成しているため、インストールする必要がある。

tensorenvの環境を有効にしてから、pipコマンドでインストール

$ source activate tensorenv

(tensorenv)$ pip install jupyter 

Jupyterの起動

(tensorenv)$ jupyter notebook

Webブラウザが起動しますので、そこからanaconda3/envs/tensorenvフォルダまで移動させます。
f:id:Yaju3D:20160327185255p:plain

更にtensorenvフォルダ配下に移動して、右横の「New」で新規ファイルを「Python 3」で作成します。
f:id:Yaju3D:20160327192015p:plain

それでは、下記サイトの演算を実際に実行してみましょう。
qiita.com

では、実際にTensorFlowを使って計算してみます。最初は、以下の式を書いてみます
y = x^2 + b

import tensorflow as tf

def x2_plus_b(x, b):
    _x = tf.constant(x)
    _b = tf.constant(b)
    result = tf.square(_x)
    result = tf.add(result, _b)
    return result

print resultではエラーとなったため、print(result)に修正しました。

with tf.Session() as sess:
    result = sess.run([x2_plus_b(2., 3.)])
    print(result)

実行結果(printの出力)は以下のようになります。
2^2 + 3 = 7 なので、きちんと計算できていることがわかります。
f:id:Yaju3D:20160327205925p:plain

TensorBoardによる可視化

TensorFlowには、TensorBoardという強力なビジュアライゼーションツールが付いている点も特徴の一つになっています。

先ほどの続きとして下記ソースを入力します。

import tensorflow as tf

def monitor_calculation(x, b):
    title = "b = {0}".format(b)
    c = x2_plus_b(float(x), float(b))
    s = tf.scalar_summary(title, c)
    m = tf.merge_summary([s])  # if you are using some summaries, merge them
    return m

with tf.Session() as sess:
    writer = tf.train.SummaryWriter("log", graph_def=sess.graph_def)    
    xaxis = range(-10, 12)

    for b in range(3):
        for x in xaxis:
            summary_str = sess.run(monitor_calculation(x, b))
            writer.add_summary(summary_str, x)

これを実行すると、ログがフォルダ(/home/yaju/anaconda3/envs/tensorenv/log)に出力されます。
f:id:Yaju3D:20160327225938p:plain

Jupyterの停止

TensorBoardのコマンドはターミナルで行うので、Jupyterの停止する必要があります。
停止するには、ターミナルにて「Ctrl + C」キーを押します。

追記 2016/04/07
Jupyterの右横にある「New」に「Terminal」がありました。
これを使えば、Jupyterを停止する必要はありません。

TensorBoardの実行

logdirには絶対パスを指定します。

(tensorenv)$ tensorboard --logdir=/home/yaju/anaconda3/envs/tensorenv/log

Starting TensorBoard  on port 6006
(You can navigate to http://0.0.0.0:6006)

Webブラウザにて、下記URLを入力します。

localhost:6006

f:id:Yaju3D:20160327231243p:plain

今回はここまでとします。

WindowsユーザーがTensorFlowをインストールしてみた

はじめに

静岡Developers勉強会では、今年の勉強会のテーマとして「人工知能ハンズオン」を予定しています。
人工知能ハンズオンとして、Googleが提供しているオープンソースの人工知能ライブラリ「TensorFlow」の使い方を学ぶという方向にでもしようかな。
とりあえずセッションを担当する自分が現状では何も分かっていない状態ですので、先ずは「TensorFlow」を自PCにインストールしてみました。

TensorFlow Ver 0.12でWindowsがサポートされましたので、記事を作成しました。
yaju3d.hatenablog.jp

もはやLinux版の環境が古くなったため、新しく記事を作成しました。
yaju3d.hatenablog.jp

インストールがお手軽なDocker版も一緒にお読み下さい。
yaju3d.hatenablog.jp

アクセス解析をみると「tensorflow 32bit版」があったので下記サイトをリンクしておきます。
TensorFlowを32bit-Ubuntuにインストールした時のメモ | Workpiles

環境

  • Windows 10 Home 64bit
  • Oracle VM VirtualBox 5.0.16

インストール準備

残念ながら、「TensorFlow」はLinux版とMac版しか用意されていません。
Windows PCをお持ちの方は、仮想PCにLinuxを入れて使用するということになります。

ちなみに、Python数値計算環境「Anaconda」のWindows版を入れれば動くかもと、「TensorFlow」をインストールしようとしましたが、Linux版やMac版のどちらを入れても、「not supported」エラーとなりました。AnacondaのWindows版はあくまでWindows上として動作するためでした。

VirtualBoxにUbuntu(64bit)をインストール

下記サイトを参考にVirtualBoxにUbuntu 14.04.2 LTSをインストールしました。
サイトとの違いとして、メモリは2048MByte、仮想ハードドライブサイズは40GByteにしています。
ottan.xyz

このままでは画面サイズは640x480と狭いので、下記サイトを参考に画面サイズを変更します。
opensourcetech.hatenablog.jp

インストール時のエラー

Ubuntu(64bit)を入れようとするとPCによっては下記のエラーが出ます。
「This kerner requures an X86-64 CPU, but only detected an i686 CPU」
これはVirtualBoxのUbuntu 32bit用に64bit版をインストールしようとしたためです。
何故、VirtualBoxにUbuntu 64bit用がリストに表示されないのかというと、PCのBIOSの仮想化機能が有効になっていないためです。有効にするためには、BIOSの設定(Lenovoでは再起動時にF1キーを押す等)で、Security→Vitualizationを「Enabled」にして保存後に再起動する必要があります。

クリップボードの共有

Ubuntuのインストールが完了したら、VirtualBoxメニューのデバイスの「クリップボードの共有」を双方向にしておくとWindowsのクリップボードを貼り付け出来たりして便利です。また、「ドラッグ&ドロップ」も同様に双方向にするといいでしょう。

ターミナルの起動

Ubuntuを使うのは初めてだったので、何をどうすればいいのかちょっと迷いました。
先ずはWindowsのコマンドプロンプトのようなのを起動する必要があります。
Ubuntuの左横のパネルメニューから「コンピューターとオンラインリソースの検索」をクリックします。
検索ボックスで「terminal」を入力すると「端末」(ターミナル)が出てきますのでクリックします。

pipのインストール

ターミナルが起動したら、最初に「pip」をインストールして下さい。
pipとは、Pythonで書かれたパッケージソフトウェアをインストール・管理するためのパッケージ管理システムです。RubyのRubyGemsやPerlのCPANやWindowsのNuGetといったところです。
ターミナル上で下記のコマンドを入力します。

$ sudo apt-get install python-pip

※$より前の部分は自分の環境では「yaju@yaju-VirtualBox:~$」です。これはインストール環境によって変わります。説明する上で便宜上省略しています。

Python数値計算環境「Anaconda」のLinux版をインストール

AnacondaとはPythonの数値計算環境を構築するために様々なパッケージをまとめた無料のディストリビューションです。
Anacondaをインストールをすると、NumPy,SciPy,matplotlib、scikit-learn等のパッケージがインストールされます。

Ubuntu上のWebブラウザ「FireFox」で下記サイトからAnaconda for Linux PYTHON 3.5 LINUX 64-BITをダウンロードしてください。ファイルの保存先は「ダウンロード」にしました。
https://www.continuum.io/downloads

※Python2.7ではなくPython3.5にしたのは、サイト「http://learningtensorflow.com/lesson1/」を参考にしたためです。

ターミナル上で「bash 」と入力したら、Ubuntuの左横のパネルメニューから「ファイル」からダウンロードフォルダにある「Anaconda3-2.5.0-Linux-x86_64.sh」をドラッグ&ドロップしました。引用符は付いたままでもいいかも知れませんが、一応消しました。

$ bash /home/yaju/ダウンロード/Anaconda3-2.5.0-Linux-x86_64.sh

AnacondaのTensorflow用環境を作成

Anacondaのインストールが終わったら、一旦ターミナルを閉じて下さい。
これはTensorflow用環境を作成する際に使用する「conda」コマンドがまだ有効になっていないためです。

Tensorflow用環境を作成するため、ターミナル上で下記のコマンドを入力します。
サイト「http://learningtensorflow.com/lesson1/」と一緒にするため、名前は「tensorenv」にしました。envは環境(environment)の略称

$ conda create --name=tensorenv python=3.4

環境が作成されていきます、途中のProceedの確認は「y」を入力します。

Proceed ([y]/n)? y

Fetching packages ...
openssl-1.0.2g 100% |################################| Time: 0:00:08 383.49 kB/s
xz-5.0.5-1.tar 100% |################################| Time: 0:00:03 174.33 kB/s
python-3.4.4-0 100% |################################| Time: 0:00:37 430.92 kB/s
setuptools-20. 100% |################################| Time: 0:00:01 268.10 kB/s
wheel-0.29.0-p 100% |################################| Time: 0:00:00 133.57 kB/s
pip-8.1.1-py34 100% |################################| Time: 0:00:04 376.02 kB/s
Extracting packages ...
[      COMPLETE      ]|###################################################| 100%
Linking packages ...
[      COMPLETE      ]|###################################################| 100%

以下のコマンドで作った環境の一覧を表示できます。

$ conda info -e

Using Anaconda Cloud api site https://api.anaconda.org
# conda environments:
#
tensorenv                /home/yaju/anaconda3/envs/tensorenv
root                  *  /home/yaju/anaconda3

作成した環境を有効にするには下記のコマンドを入力します。

$ source activate tensorenv

これで先頭に「(tensorenv)」が付くようになります。

(tensorenv)$

pipのバージョン確認

TensorFlowをインストールしようした際、pipのバージョン 8.1.1でないと下記のエラーが表示されます。

You are using pip version 8.0.2, however version 8.1.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.

下記のコマンドでpipのバージョンが確認できます。

(tensorenv)$ pip -V

もし、pipのバージョン 8.1.1でない場合、下記のコマンドでpipをアップグレードします。

(tensorenv)$ pip install --upgrade pip

※tensorenvの環境を有効にしないまま、TensorFlowをインストールしようとしたからpipのバージョン 8.0.2のままだったのかも。tensorenvの環境を有効にしたなら、pipのバージョン 8.1.1がインストールされているはず。

TensorFlowのインストール

TensorFlowには、「CPU only」と「GPU enabled」の2種類が用意されています。今回は「CPU only」版をインストールします。
ファイル名はPython34にしているので「tensorflow-(version No)-cp34」となります。ちなみにPython27は「cp27」です。
バージョンは現時点(2016/03/27)で最新の「0.7.1」を入れます。
入力が長いのでクリップボードにコピーして貼り付ければいいです。

(tensorenv)$ pip install --upgrade https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.7.1-cp34-none-linux_x86_64.whl

Building wheels for collected packages: numpy あたりで10分程度かかりました。

Collecting tensorflow==0.7.1 from https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.7.1-cp34-none-linux_x86_64.whl
  Downloading https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.7.1-cp34-none-linux_x86_64.whl (13.8MB)
    100% |████████████████████████████████| 13.8MB 36kB/s 
Requirement already up-to-date: wheel>=0.26 in ./anaconda3/envs/tensorenv/lib/python3.4/site-packages (from tensorflow==0.7.1)
Collecting numpy>=1.8.2 (from tensorflow==0.7.1)
  Downloading numpy-1.10.4.tar.gz (4.1MB)
    100% |████████████████████████████████| 4.1MB 79kB/s 
Collecting six>=1.10.0 (from tensorflow==0.7.1)
  Downloading six-1.10.0-py2.py3-none-any.whl
Collecting protobuf==3.0.0b2 (from tensorflow==0.7.1)
  Downloading protobuf-3.0.0b2-py2.py3-none-any.whl (326kB)
    100% |████████████████████████████████| 327kB 315kB/s 
Collecting setuptools (from protobuf==3.0.0b2->tensorflow==0.7.1)
  Downloading setuptools-20.3.1-py2.py3-none-any.whl (508kB)
    100% |████████████████████████████████| 512kB 276kB/s 
Building wheels for collected packages: numpy
  Running setup.py bdist_wheel for numpy ... done
  Stored in directory: /home/yaju/.cache/pip/wheels/66/f5/d7/f6ddd78b61037fcb51a3e32c9cd276e292343cdd62d5384efd
Successfully built numpy
TensorFlowのインストールエラー

途中で下記のエラーが発生してインストールが止まります。

Installing collected packages: numpy, six, setuptools, protobuf, tensorflow
Found existing installation: setuptools 20.3
Cannot remove entries from nonexistent file /home/yaju/anaconda3/envs/tensorenv/lib/python3.4/site-packages/easy-install.pth

これは、パッケージの依存関係のコンフリクトっぽいので対象パッケージをremoveしてから再度Tensorflowをインストールします。

conda remove -n tensorenv setuptools

途中のProceedの確認は「y」を入力します。

Using Anaconda Cloud api site https://api.anaconda.org
Fetching package metadata: ....

Package plan for package removal in environment /home/yaju/anaconda3/envs/tensorenv:

The following packages will be REMOVED:

    setuptools: 20.3-py34_0

Proceed ([y]/n)? y

Unlinking packages ...
[      COMPLETE      ]|###################################################| 100%
TensorFlowの再インストール

コマンド入力したのは履歴が残っていますので、矢印の上キーを入力すると楽です。

(tensorenv)$ pip install --upgrade https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.7.1-cp34-none-linux_x86_64.whl

setuptoolsのコンフリクトを解消させてからTensorFlowのインストールすれば再インストールする必要はないんですが、既にインストールされている部分は飛ばすので時間はかかりません。

Collecting tensorflow==0.7.1 from https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.7.1-cp34-none-linux_x86_64.whl
  Using cached https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.7.1-cp34-none-linux_x86_64.whl
Requirement already up-to-date: wheel>=0.26 in ./anaconda3/envs/tensorenv/lib/python3.4/site-packages (from tensorflow==0.7.1)
Requirement already up-to-date: numpy>=1.8.2 in ./anaconda3/envs/tensorenv/lib/python3.4/site-packages (from tensorflow==0.7.1)
Requirement already up-to-date: six>=1.10.0 in ./anaconda3/envs/tensorenv/lib/python3.4/site-packages (from tensorflow==0.7.1)
Collecting protobuf==3.0.0b2 (from tensorflow==0.7.1)
  Using cached protobuf-3.0.0b2-py2.py3-none-any.whl
Collecting setuptools (from protobuf==3.0.0b2->tensorflow==0.7.1)
  Using cached setuptools-20.3.1-py2.py3-none-any.whl
Installing collected packages: setuptools, protobuf, tensorflow
Successfully installed protobuf-3.0.0b2 setuptools-20.3.1 tensorflow-0.7.1

TensorFlowの動作確認

バージョンが表示されればインストール成功です。

(tensorenv)$python -c "import tensorflow; print(tensorflow.__version__);"

0.7.1

これでやっとTensorFlowを始められます。

Σ(シグマ)の数式を理解してみる

Σ(シグマ)って何

高校2年生頃に数列としてΣ(シグマ)という数式を習います。
例えば、1からnまでの数列の総和を求めなさいといった場合、下記のよう数式になります。
1+2+3+\cdots+n
\displaystyle \sum_{k=1}^{n}{a_{k}}=\Large a_1+a_2+a_3+\cdots+a_n

このくらいは簡単に理解できますね。
ちなみに、1からnまでの数列の総和は下記の公式で簡単に求めることが出来ます。
\displaystyle \sum_{k=1}^{n}{{k}}=\frac1{2}n(n+1)
参照:ガウスの少年時代の逸話

あと、足し算ではなく掛け算の場合、Π(パイ)という数式を使います。
1 \times 2 \times 3 \times \cdots+n
\displaystyle \prod_{k=1}^{n}{a_{k}}=\Large a_1 \times a_2 \times a_3 \times \cdots \times a_n
でも、掛け算の場合は対数にして掛け算を足し算に変換するため、Σ(シグマ)にすることが多いです。

Σ(シグマ)の意味

Σの意味は「合計」です。英語で言えば、「sum」です。
そして、Σは「シグマ」と読むギリシャ文字(σの大文字)で、英語のアルファベットの「S」(sの大文字)に相当します。
ですから、頭文字としてΣが使われます。

Σ(シグマ)の入門

世間的にはビッグデータを活用しようと統計学を学ぶ機会が増えてきました。
幾つかのデータの総和と平均値を求める数式を作成してみます。
データを x_1, x_2, x_3,\cdots,x_nとした場合、
合計値 \Large S_n = \displaystyle \sum_{i=1}^{n}{{x_i}}=\Large x_1+x_2+x_3+\cdots+x_n
平均値 \Large \bar{x} =\displaystyle {1 \over n} \sum_{i=1}^{n} x_i

ここで急に変数を k から i に変更しましたが、これは好みの問題です。
公式では変数は k なのですが、プログラムを組む側とすると繰り返し変数は i の方が馴染みやすいというだけです。
qiita.com

Σ(シグマ)の応用

統計学で急に難しく感じるのは標準偏差ですよね。数式も急に複雑に感じます。
標準偏差 \sigma = \sqrt{\displaystyle {1 \over n} \sum_{i=1}^n(x_i - \bar{x})^2 }

これを紐解いていきます。自分は自身の学習のためにこれから書いていきますが、標準偏差については図入りで分かりやすい下記サイトを見るといいでしょう。
qiita.com

標準偏差の数式の中身を分解していきます。
(x_i - \bar{x})
これは何をしているかというと、各データ(x_i)と平均値(\bar{x})の差を求めています。
これを「偏差」といいます。※平均値(\bar{x})については、Σ(シグマ)の入門のところで数式を求めましたよね。

先ほどのQiitaのサイトのデータを拝借してみます。
各IDの数学の点数から平均値の81を減算します。

ID 点数 偏差
1 96 96-81= 15
2 63 63-81= -18
3 85 85-81= 4
4 66 66-81= -15
5 91 91-81= 10
6 89 89-81= 8
7 77 77-81= -4

次に進みます。
\displaystyle \sum_{i=1}^n(x_i - \bar{x})^2
これは、先程の偏差をそれぞれ2乗して総和を求めます。

ID 偏差 偏差^2
1 15 15^2 = 225
2 -18 -18^2 = 324
3 4 4^2 = 16
4 -15 -15^2= 225
5 10 10^2 = 100
6 8 8^2 = 64
7 -4 -4^2 = 16

総和は 225+324+16+225+100+64+16 = 970 となります。

ちなみに2乗しないまま総和すると、15-18+4-15+10+8-4 = 0と値が 0 になってしまいます。
2乗することで負数がなくなりすべて正数になります。
単純に正数にするなら絶対値でいいのではないかという疑問がわくと思います。余談ですが、実際「平均偏差」の場合は絶対値を使っています。
rikunora.hatenablog.com

ここは、ピタゴラスの定理(三平方の定理)を思い出して欲しいのです。直角三角形の斜辺の長さを求めるには\sqrt{x^2 + y^2}
つまり、「データのばらつきとは、平均点からの距離を表している」のです。そのため2乗するわけです。
f:id:Yaju3D:20160228160455j:plain

機械学習を学ぶ時に2乗誤差が出てきます。2乗なら簡単に微分できるのですが、絶対値の微分は面倒だったりします。その点でも2乗するのは利点があります。

次に進みます。
\displaystyle {1 \over n} \sum_{i=1}^n(x_i - \bar{x})^2
これは単純ですね。先ほど求めた2乗の総和の平均を求めるためです。
この平均からの偏差を二乗したものを足し合わせて平均を取ったものを「分散」と言います。
分散は、  970 / 7 = 138.571428

最後の標準偏差の数式に戻りました。
\sigma = \sqrt{\displaystyle {1 \over n} \sum_{i=1}^n(x_i - \bar{x})^2 }
分散で求めた値をルートした結果が標準偏差となります。
ちなみに、ルート √ は二乗したらその値になるという定義で、\sqrt{25}=5 となります。
標準偏差は、 \sqrt{138.571428} = 11.771636
Excelにて標準偏差関数(STDEVP)を使って求めた場合、11.77164となりました。

ついでに学力を測定する値として「偏差値」ということばをよく耳にしますが、偏差値は標準偏差を分母に使った下記の数式となります。
\Large T_i = \displaystyle {10(x_i - \bar{x}) \over \sigma} + 50

参照:偏差値の求め方 - すぐる学習会

Σ(シグマ)の実習

Σ(シグマ)の数式に変換するのに、内積が丁度いい題材としてあります。
3次元のベクトルの内積を取る計算は下記のようになります。
\vec{a}=(a_1,a_2,a_3),\vec{b}=(b_1,b_2,b_3)
\vec{a} \cdot \vec{b} = a_1b_1 + a_2b_2 + a_3b_3

\vec{a}\cdot\vec{b} = \displaystyle \sum_{k=1}^{3}a_{ik}b_{ik}

内積では1行だけなので、複数行にした行列の積の場合
\begin{pmatrix}
a_{11} & \ldots & a_{1n} \\
\vdots & \ldots & \vdots \\
a_{n1} & \ldots & a_{nn} \\
\end{pmatrix}
\begin{pmatrix}
b_{11} & \ldots & b_{1n} \\
\vdots & \ldots & \vdots \\
b_{n1} & \ldots & b_{nn} \\
\end{pmatrix} =
\begin{pmatrix}
\sum_{i}a_{1i}b_{i1} & \ldots & \sum_{i}a_{1i}b_{in} \\
\vdots & \ldots & \vdots \\
\sum_{i}a_{ni}b_{i1} & \ldots & \sum_{i}a_{ni}b_{in} \\
\end{pmatrix}

(ab)_ij = \displaystyle \sum_{k=1}^{n}a_{ik}b_{kj}
これをプログラムで書くと下記になります。※数式と違いk=1ではなくk=0にしています。

for (i = 0; i < n; i++) {
    for (j = 0; j < n; j++) {
      c[i][j] = 0;
      for (k = 0; k < n; k++) {
	c[i][j] += a[i][k] * b[k][j];
      }
    }
}

Σ(シグマ)の二重和

Σ(シグマ)を2つ繋げて書く方法があります。参照:シグマ計算を機械的に行うための3つの公式
シグマが2つ並んだ場合,内側のシグマから順番に計算します
\displaystyle \sum_{i=1}^{m}\sum_{j=1}^{n}a_{ij}
 = \displaystyle \sum_{i=1}^{m}(\Large a_1+a_2+a_3+\cdots+a_n)
 = \Large a_{ij} のすべての和

これの用途ですが、画像フィルタなどに使われています。
線形フィルタ(Linear filter)は M行xN列 の近傍マトリックス、及び同じサイズの係数マトリックスで積和演算を行い注目画素の画素値を変換するフィルタのことです。
g(i,j) = \displaystyle \sum_{n=-w}^{w}\sum_{m=-w}^{w}f(i + m, j + n)h(m,n)
参照:フィルタ処理の概要


f:id:Yaju3D:20160417025404g:plain

「サザエさんのじゃんけん データ分析」の2015年の結果

明けましておめでとうございます。

まさか昨年、東芝が不正会計であんなことになるなんて思ってませんでした。
東芝は1998年にアニメ「サザエさん」の単独提供を終了しているわけですが、白色家電を売却する予定があるとすると、お茶の間に商品をアピールするものはなくなってしまうじゃないかと思うんですが、何とかするんでしょうね。

さてさて、2015年のサザエさんのじゃんけん結果はどうなったでしょう。
ちなみに、2014年のサザエさんのじゃんけん結果は、30勝10敗11分(勝率0.75)でした。


次の手の予測アルゴリズム
・チョキが多いので、グー > チョキ > パーの優先順位とする
・前回と違う手を出すので、上記の優先順位で勝手を選ぶ
・二手前と一手前が違う手なら、残りの手を出すので勝手を選ぶ
・三手の中に同手がある場合、 残りの手を出すので勝手を選ぶ
・二手前と一手前が同じ手なら、勝手を出すので負手を選ぶ

年月 サザエさんの手 予想の手 勝敗結果
1月4日 チョキ グー 勝ち
1月11日 チョキ グー 勝ち
1月18日 グー パー 勝ち
2月1日 パー チョキ 勝ち
2月8日 パー グー 負け
2月15日 チョキ グー 勝ち
2月22日 グー パー 勝ち
3月1日 チョキ チョキ 引き分け
3月8日 パー チョキ 勝ち
3月15日 グー パー 勝ち
3月22日 チョキ グー 勝ち
3月29日 グー チョキ 負け
4月5日 チョキ チョキ 引き分け
4月12日 パー チョキ 勝ち
4月19日 グー パー 勝ち
4月26日 グー グー 引き分け
5月3日 チョキ グー 勝ち
5月10日 パー チョキ 勝ち
5月17日 グー パー 勝ち
5月24日 パー グー 負け
5月31日 チョキ グー 勝ち
6月7日 グー パー 勝ち
6月14日 チョキ チョキ 引き分け
6月21日 パー チョキ 勝ち
6月28日 パー パー 引き分け
7月5日 チョキ パー 負け
7月12日 グー パー 勝ち
7月19日 チョキ チョキ 引き分け
7月26日 チョキ チョキ 引き分け
8月2日 パー チョキ 勝ち
8月9日 グー パー 勝ち
8月16日 グー グー 引き分け
8月23日 パー グー 負け
8月30日 チョキ グー 勝ち
9月6日 グー パー 勝ち
9月13日 チョキ チョキ 引き分け
9月20日 パー チョキ 勝ち
9月27日 グー パー 勝ち
10月4日 チョキ グー 勝ち
10月11日 グー チョキ 負け
10月18日 パー チョキ 勝ち
10月25日 パー グー 負け
11月1日 チョキ グー 勝ち
11月8日 グー パー 勝ち
11月15日 グー チョキ 負け
11月22日 パー チョキ 勝ち
11月29日 チョキ グー 勝ち
12月6日 グー パー 勝ち
12月13日 パー チョキ 勝ち
12月20日 パー グー 負け

結果は、32勝9敗9分(勝率0.78)となりました。

ちなみに、サザエさんじゃんけん研究所 公式ウェブサイト
サザエさんの手の予想と勝負結果(2015年)が33勝9敗8分(勝率0.785)でした。

研究サイトと対して差がないわけで、特に分析はしませんけどね。

2013年に静岡Developers勉強会で機械学習を学び、2014年1月にネタとしてSlideShareに公開しました。
時代的にはR言語ではなく、Python+Pandasで今年あたりに資料を作り直したいところ。

UnityでVisual Basicを使ってみる

これは、Visual Basic Advent Calendar 2015およびUnity Advent Calendar 2015の18日目の記事です。
Visual Basicのの17日目の記事はhilaponさんの「Visual Basic 2015 の新機能(その1)」でした。
Unityの17日目の記事はcra_cellarさんの「EditorWindowのデザインを作成するエディター拡張」でした。

Unityでは3種類のプログラミング言語C#, JavaScript(型付), Boo(Python方言)を使用することが出来ます。しかし、Unity5からはスクリプトリファレンスや新規作成から Boo が無くなりましたので、実質は2種類ということになります。
ここで書くまで勘違いしていたのですが、UnityScriptはJavaScript(型付)のことだったんですね、Booと間違えてました。
Unityの言語使用比率は、C# 約80%、JavaScript 約20%となっているようです。

.NET系開発の2大言語は、C#VisualBasicですよね。だとしたらUnityでもVisual Basicを選択言語としてサポートしてくれてもいいのに…。
ま、コスト的にはサポートする言語を増やすのは難しいでしょうけど。

ということで、無理矢理にでもUnityでVisual Basicを使ってみようというのが、今回のテーマです。

自分が考えた方法は下記の2点となります。どちらにしてもIDEによるデバッグ難しいでしょう。
1. Visaul Basicで作成したクラスライブラリ(dll)を参照して使用する
2. .NET Compiler Platform(Roslyn)を使いVisual BasicからC#に変換して使用する


1. Visaul Basicで作成したクラスライブラリ(dll)を参照して使用する

以前、「初心者がF#をUnityで使ってみた!」の記事を見たことがあったので、この方法ならVisual Basicでも出来ると思っていました。

Visual Basicのプログラム 「unityVBTest.dll」を作成

Public Class UnityVBTest

    Public Function Message() As String
        Return "Hello VB DLL"
    End Function

End Class

UnityのC#スクリプト 参照に「unityVBTest.dll」を追加

using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class test : MonoBehaviour
{
    public Text Message;

    // Use this for initialization
    void Start()
    {
        var vbTest = new unityVBTest.UnityVBTest();
        Message.text = vbTest.Message();
    }
}

【実行結果】文字をDLLから取得して表示している。
f:id:Yaju3D:20151218010435j:plain


2. .NET Compiler Platform(Roslyn)を使いVisual BasicからC#に変換して使用する

.NET Compiler Platform(Roslyn)ですが、2年前の「Visual BasicでRoslynを使ってみる」でプログラムを作成した以来です。久しぶりにさわってみるといろいろ変更があったようで、この記事向けに数時間で組むとなると自分の力量では無理と判断しました。
すみませんが、日を改めて別記事とさせて頂きます。

構想としては、Visual Studioにビルドイベントがありますので、Visual BasicでUnityのプログラムを作成し、ビルド完了時にNET Compiler Platform(Roslyn)でVisual BasicからC#に変換します。もちろん、アタッチするのは変換したC#スクリプトとなります。

Visual BasicからC#に変換するプログラムは、gekkaさんの下記サイトを参考にして逆のものを作成してみるつもりです。
Roslynを使用してC#からVBに変換する方法


ではでは、
19日目のVisual Basic Advent Calendar 2015は、hilaponさんです。
19日目のUnity Advent Calendar 2015は、kyubunsさんです。

スポンサーリンク