北野坂備忘録

主にインストールやプログラミングのメモを載せています。

『Python機械学習プログラミング』


Python機械学習プログラミング 達人データサイエンティストによる理論と実践 (impress top gear)

 なにかこう「一面コードだらけ」という本かなーと想像していたんですが、理論や描画の話も多く前処理にも章を割いています。本のアオリに「絶妙なバランスで『理論と実践』を展開」と書いてありますが偽りナシです。
 しかしscikit-learnを使い始めるとコードがRと似てきますね。numpy.cov()とかnumpy.dot()とかも機械学習やってなかったら一生使わなかったと思います。
 内容としてはパーセプトロンから始まってニューラルネットワークのTheano, Kerasで終わるというふうに幅広い技術をカバーしています。特にTheano, Kerasを扱っているのが今風ですね。これはもう立派な教科書です。とりあえずコイツを使ってコードを書かせて、理論面は他の教科書でもう少し勉強する、と。写経するだけでもかなりレベルアップできるでしょう。
 「今からこの本で機械学習を勉強する」というひとはかなりお得ですね。名著だと思います。

「下丸子のコネクショニスト」さんの「CaffeでMNISTを学習した経過をプロットしてみた」を試す

「下丸子のコネクショニスト」さんの


iamrobotandproud.hatenablog.com
を試す。

 なにかおかしいと思ったら、

事前に用意されたプログラムに誤植があるため、下記のように訂正した。

plot_log.gnuplot.exampleの42, 43行目を

set xlabel "Training loss"
set ylabel "Training iterations"

から

set ylabel "Training loss"
set xlabel "Training iterations"

に変更した。

 の部分がすでに修正されていました。

 あと、

実は、parse_log.shは現行バージョンのCaffeが出力するログ形式に完全に対応している訳ではなく、mnist.log.testにIterationのデータが出力されていない。

そこで今回は仕方なく、テスト時のプロットには学習時間を横軸に用いることにした。

 の部分も今ではIterationのデータが出力されているので話が合わない。

 ので、末尾に追加する部分を以下のように変更しました。

# Test accuracy vs. training time
set ylabel "Test accuracy"
set xlabel "Iteration"
plot "mnist.log.test" using 1:3 title "mnist"

 ありがとうございました。大変参考になりました。

『パターン認識と機械学習』(黄色本)再読

 PRML(『パターン認識機械学習』)の上巻に再度手を伸ばしました。

パターン認識と機械学習 上
 去年の5月ぐらいに読んだときは全く理解できなかった内容が「これも分かる!あれも分かる!」となり、まるで『グラップラー刃牙』の序盤で山籠もりの結果勇次郎の攻撃を見切れるようになった公園本部のような感動を味わっています。
(そして直後に一撃喰らわされて終わるところまでがテンプレ)

Ubuntu15.04 に Caffeをインストールした際のメモ

hdf5関係でコンパイル失敗。2箇所でひっかかる。

./include/caffe/data_layers.hpp:9:18: fatal error: hdf5.h: no such file or directory
/usr/bin/ld: cannot find -lhdf5_hl
/usr/bin/ld: cannot find -lhdf5

Makefile.configの以下の2行を変更。

INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial/
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu/hdf5/serial

軽量言語からJavaに移って苦労している人はデザインパターンの本を読むと良い

 デザインパターンの本は何冊か読みましたが、当時はいまひとつピンときませんでした。
 行番号付きBASICからはじまってC言語Ruby、R、Pythonとクソコードを書き散らしてきましたが、あまりデザインパターンの必要性を感じなかった。
 話が変わったのがJavaに触れてからです。
 interface、extends、implementsという拡張のさせかたがしっくりと来ず、リストリクト過ぎてどうすれば自分の思った通りのことが実現できるのか分からない。
 そんな時に出会ったのがこの本です。

Javaデザインパターン徹底攻略 (標準プログラマーズライブラリ)
 私が参考になったのはこの本でいう7番の「Bridgeパターン」でした。2つのクラスはそのまま残しておかないといけなくて、しかしながらそいつらを組み合わせたクラスを作らないといけない。RubyとかPythonならまあ予想はつくんですが、Javaでどうすればいいか頭を抱えていたところこの本を読んで「おお、こうするのか!」と呻きました。
 そのとき初めてデザインパターンの威力を実感しました。というか今でもJavaでしか実感したことがない。
 このように、Ruby、R、Pythonといった軽量言語(この言葉もあまり一般的ではないですが)から極めて制限の強いJavaに移って「もどかしさ」を感じられておられる方は、デザインパターンを勉強すれば若干苦しみが減ると思います。

VMWare上のUbuntuのネットワークが不安定(メモ)

 ひっさしぶりに立ち上げたVMWare上のUbuntuのネットワークが不安定。
 しばらくすると切れるけども、また接続される。
 これでは仕事にならない。

 VMWareの「仮想マシン設定」を確認。
 ネットワークアダプタがNATになってる……?
 別件で別のVMの「仮想マシン設定」のネットワークアダプタが「ブリッジ(自動)」になっていたことを思い出す。
 ネットワークアダプタを「ブリッジ(自動)」に変更。
 しばらくpingを飛ばし続けたが、さきほどと違ってときどき4pingほど失敗することがなくなり、安定しました。
 いったい過去の自分は何の目的があってNATにしたのか……?