TensorFlowをMacで試す

TensorFlowでましたね。胸熱な感じです。
難しい言葉が溢れる中、これ一発でディープラーニングがキャズムを超えるとは思わないけど、とりあえず使ってみました。
Macに入れて、サンプル動かしたかっただけなのに色んなトラップが仕掛けられてます。

とりあえずインストール

$ pip install https://storage.googleapis.com/tensorflow/mac/tensorflow-0.5.0-py2-none-any.whl
tensorflow-0.5.0-py2-none-any.whl is not a supported wheel on this platform.

はい、こけました。
公式のチュートリアル2行目に書いてますが、Python3系では動かず、Python2.7系でしか動きません。
気を取り直しpyenvで2.7に切り替え再度インストール。
無事インストールされました。

$pip freeze
numpy==1.10.1
six==1.10.0
tensorflow==0.5.0

ディープラーニングといえば、MNISTで試すというが定番なのか知りませんですが、これを試してみます。

# git clone --recurse-submodules https://github.com/tensorflow/tensorflow

さっそく学習させてやろうと思いましたが、またもエラー発生。

# python ./tensorflow/g3doc/tutorials/mnist/fully_connected_feed.py
Traceback (most recent call last):
  File "./tensorflow/g3doc/tutorials/mnist/fully_connected_feed.py", line 23, in <module>
    from tensorflow.g3doc.tutorials.mnist import input_data
ImportError: No module named g3doc.tutorials.mnist

fully_connected_feed.py のモジュール呼び出しの部分を修正

from tensorflow.g3doc.tutorials.mnist import input_data
from tensorflow.g3doc.tutorials.mnist import mnist
↓
import input_data
import mnist

別の部分でエラー発生!キー!

# python ./tensorflow/g3doc/tutorials/mnist/fully_connected_feed.py
Traceback (most recent call last):
  File "./tensorflow/g3doc/tutorials/mnist/fully_connected_feed.py", line 223, in <module>
    tf.app.run()
  File "/Users/takashiaoki/.pyenv/versions/2.7.10/lib/python2.7/site-packages/tensorflow/python/platform/default/_app.py", line 11, in run
    sys.exit(main(sys.argv))
  File "./tensorflow/g3doc/tutorials/mnist/fully_connected_feed.py", line 219, in main
    run_training()
  File "./tensorflow/g3doc/tutorials/mnist/fully_connected_feed.py", line 139, in run_training
    loss = mnist.loss(logits, labels_placeholder)
  File "/Users/takashiaoki/www/tensorflow2/tensorflow/tensorflow/g3doc/tutorials/mnist/mnist.py", line 94, in loss
    indices = tf.expand_dims(tf.range(batch_size), 1)
TypeError: range() takes at least 2 arguments (1 given)

mnist.pyが新しすぎるとの事なので、古いバージョンに差し替える

# python ./tensorflow/g3doc/tutorials/mnist/fully_connected_feed.py
・
・
・
Training Data Eval:
  Num examples: 55000  Num correct: 49218  Precision @ 1: 0.8949
Validation Data Eval:
  Num examples: 5000  Num correct: 4512  Precision @ 1: 0.9024
Test Data Eval:
  Num examples: 10000  Num correct: 9017  Precision @ 1: 0.9017

やっと学習しだしました。
数回やって精度は90%ほどです。

TensorBoardを使えばブラウザ上で学習状況がみれるのでこれを試してみます。

# tensorboard --logdir=./data

ブラウザで、http://localhost:6006/ に接続するとグラフが確認できます。

ログが入ったディレクトリを指定するだけ良いはずなのにでない…

調べてみると相対パスでたダメな模様。

# tensorboard --logdir=/Users/takashiaoki/www/tensorflow/tensorflow/data

はい、動きました。

y軸はミスした数ですね。
これがドンドン下がって学習されていってるのが見て取れます。

アプリケーションフレームワークと違い、もっと土台になる部分のフレームワークです。
これにもうちょい実装がのった形で、誰か何かリリースしてくれないかなーと思う文系エンジニアでした。

0

skype bot

skypeのbotをlinuxで動かした時のメモです。
作ったのは、botを動かしてコンタクトリストのメンバーのステータスを取得するってやつです。
(諸般の事情で公開してるのはオウム返しするだけのbotです。そのうち公開します。)

以前もmsnのメッセンジャーで同じものを作ったのですが、作り方は全然変わりました。
msnもskypeもプロトコルは非公開ながらmsnのプロトコルはhackされててperlのモジュールなんかも公開されてます。
http://www.bot-depot.com/forum-12.html

skypeはというとプロトコルは非公開ながら外部のソフトウェアからskypeを操作できるAPIが公開されています。

今回使ったのは公式のpython製のskypeAPIのラッパーです。
https://developer.skype.com/wiki/Skype4Py

windowsで使うのは比較的簡単なんだろうけど、コンソール派の人間には慣れない作業がけっこうありました。
msnと違い、まずはlinuxにwindow managerをインストールし、そこにskypeをインストールする必要があります。

window managerはvnc(windowsのリモートデスクトップのようなもの)で動かすのを前提としてるのでGnomeやKDEは辞めXFCEを選択。
はじめて知ったけど超軽量のwindow managerだそうです。
インストールはyumでさくっと。
# yum groupinstall XFCE
VNCも入ってなかったのでVNCもインストール
# yum install vnc-libs.i386
VNCとXFCEを紐づけるためにvncの設定ファイルを少し修正。
# vim /root/.vnc/xstartup
[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
vncconfig -iconic &
xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
# twm &
/usr/bin/startxfce4 &
# startxce4 &

vncを実行
# vncserver
問題なければ下記のようなメッセージが返される。
New 'hoge.com:2 (www)' desktop is hoge.com:2
Starting applications specified in /root/.vnc/xstartup
Log file is /root/.vnc/osakarights.com:2.log

このwindowsのosakarights.com:2 (www)をVNCクライアントに入力する。

後はすべてwindowsからVNC越しに作業。

firefoxでhttp://www.skype.com/intl/ja/download/skype/linux/choose/にアクセスしfedora7用のskypeをインストール。
デスクトップは初めてに等しかったので驚いたが、rpmのリンクをクリックするとあれよあれよとインストールが開始され無事終了。

skypeは一世代前のようなインターフェース。

今回はbotとして動いてもらうだけなんでまあいいや。
とりあえず、アカウントを入力してコンタクトリストに何人か登録。
(これもAPIでできる)

skype4pyもインストール
http://sourceforge.net/project/showfiles.php?group_id=202148

これでlinux版skypeをpythonから操作できる準備ができました。
あとはhttp://skype4py.sourceforge.net/doc/html/あたりを参考にごにょごにょ弄ってみる。

サンプルで話しかけられた厭味ったらしくオウム返しするbotを作ってみた。
もちろんこのこのコードもvnc超しのデスクトップのターミナルで実行する必要があります。
# -*- coding: utf-8 -*-
#
# skypeのbotの操作プログラム
# モジュール呼び出し
import Skype4Py
"""
メッセージを送る
"""
def OnMessageStatus(Message, Status):
if Status == 'RECEIVED':
print(Message.FromHandle + ': ' + Message.Body);
s.skype.CreateChatWith(Message.FromHandle).SendMessage(u"( ´,_ゝ`)プッn" + Message.Body + u'だって。')
skype = Skype4Py.Skype()
# Attach to Skype client
skype.Attach()
skype.OnMessageStatus = OnMessageStatus;

このAPIはほとんどのことができます。
ユーザー追加したり、電話したり、チャットしたり、履歴とったり等々。
あとはアイデア次第で、
フィードの更新があったらコンタクトリストのメンバーにメッセージ送ったり
チャットの入力エリアをgoogle検索のインタフェースにしたり
FTPクライアントにしたり等々
できます。

0

python2.4.3→python2.5.2

わけあってpythonをアップグレード。
yumだとなぜかできない。(yumがpythonだから?)
なんで、ソースからインストール。
これだと/usr/local/bin/pythonにインストールされます。
しかし、デフォルトのpythonは/usr/bin/pythonにインストールされています。

新バージョンのシンボリックをはりたいところだけど、全部をpython2.5.2にしてしまうとyumが動かなくなり大変なことになってしまいます。

少し気持ち悪いけど、そのままにしてyumはpython2.4.3で、そのほかはpython2.5.2で動かすのが無難と思いそのままにしてます。