しんさんのブログ

科学や技術のこと読書のことなど

機械学習を勉強してみる:「ITエンジニアのための機械学習理論入門」のサンプルコードを実行してみる

先日紹介した、「ITエンジニアのための機械学習理論入門」を使って機械学習を手を動かして勉強しています。
まずは、この本に載っているサンプルの実行を行ってみます。
出版社のページに、サンプルのダウンロードサイトへのリンクがありますので、そこからサンプルをダウンロードしました。gihyo.jp

まずは、02-square_error.pyを実行しようとしてソースをよく見るとPython2系のコードです。
私の環境はPython3ですので、さっそくAnacondaでPython2.7をインストールしました。
Python3用にコードを書き換えてもいいのですが、そこで時間を使うこともないのでさくっと2.7をインストールしました。
私はWindows上でConEmuというターミナルを使っていますので、そこからIPythonを立ち上げ
%run 02-square_error.py
で実行しました。
f:id:wshinya:20151202160022p:plain
上のような図が表示されましたが、
C:\Anaconda2\lib\site-packages\matplotlib\collections.py:590: FutureWarning: elementwise comparison failed; returning scalar instead, but in t
he future will perform elementwise comparison
というようなwarningが表示されました。matplotlib関係なので、まあ無視してもよさそうです。

Processing3.01でOpenGLサンプルが動かないときの解決法

Processing3.0にバージョンアップ後、いくつかのサンプルが動かなくなっています。
多くは、先日書いたsetup関数の問題なのですが、OpenGLサンプルも動かなくなっていることに気づきました。wshinya.hatenablog.com

これは、vertex buffer objectの設定の仕方に変更があったためのようです。
以下の記事を読めば解決すると思います。github.com

ディープラーニングについてのもやもやしたもの

最近あちこちで機械学習とかディープラーニングという言葉をよく聞きます。
あたかも夢の手法のようにディープラーニングを使って認識率が上がりましたとか使われているのをあちこちで聞いて、そんなにすごい技術なのかという疑問とともに何がどうすごいのかという疑問がわいてきました。
ディープラーニングという言葉をよく使っている人に聞いても、意外と技術の本質についての答えは返ってこないことが多いです。
いろんなライブラリやツールが出回っていて、学習するデータさえ用意すればブラックボックスのように使うことができて、それなりに何か結果ががでるのでその段階でディープラーニングや機械学習というものが語られてしまっていることが原因のようです。
このように、魔法のキーワードのように使っているだけの人が多い中で以下のブログで紹介されている書籍では、私の感じているもやもやしたものを”はじめに”でズバリと語ってくださっています。enakai00.hatenablog.com
ブログを読んでいてふと気づいたのですが、この著者の方、遠い昔の学生時代にお会いたりお見かけしたことがある方です。(一方的に私が知っているだけです)
そうか、彼(と言っては失礼かもしれませんが)の書いた本ならごまかしも、あやふやなぼやかしもないだろうしきちんと技術を第1原理から説明してくれているだろうという信頼感もあり、さっそく購入しました。
多忙にかまけてまだ読めていませんが、ぼちぼちと読み進めていきたいと思います。

著者がslide shareにこの書籍に関するプレゼン資料をあげていますので、リンクしておきます。

www.slideshare.net

WindowsのターミナルをConEmuに変更 [2017年6月11日に編集]

Windows上のターミナルを以前はMinGW+minttyを使用していましたが、タブが使えるConEmuの方が便利で使いやすいと知ったので、乗り換えました。

MinGWでの開発環境の設定については以下のサイトを参考にしました。
PENGUINITIS - MinGW 64 bit 版 のセットアップ

設定が細かくできるようですが、とりあえず上のサイトで紹介されている設定を流用させていただきました。
起動も速く、軽くて快適です。

2016年8月16日追加情報です。
"MSYS2で快適なターミナル生活"というmsys2の紹介ページがありましたので、こちらも参考にするといいです。
qiita.com

2017年6月12日 リンク先がなくなっていたので削除し、minGWでの開発環境設定のページへのリンクを追加しました。

Processing3.0の正式版とOpenCV for Processingの導入

ついにProcessing3.0の正式版がリリースされましたので早速導入しました。
以前からのバージョンと同じで、インストーラーなどは必要なく解凍して実行ファイルを実行するだけです。
ただし、前から使っていた方は以前の環境設定ファイルを読み込んでくれます。

前にも書きましたがちょっとした実験やrapid prototypingにProcessingを使おうと思っていますので、私が今興味のある画像処理関係について簡単に触れるようにするためにOpenCVを追加で導入することにしました。
Processingの Tools -> Add toolでLibrariesやModes, Toolsなどが簡単にインストールできますが、Librariesの中にあるOpenCVはここからはインストールできなかったので(2015/10/3時点)手動でインストールしました。
やり方は以下のブログをみました。tkitao.hatenablog.com
ブログに書いてある通りに解凍して、ファイルをコピーするだけですので、簡単ですね。
導入したOpenCV for Processing のバージョンは0.5.2です。
さらにWEBカメラの映像をリアルタイム処理したいので、Videoライブラリーもインストールしました。
こちらは、Tools -> Add tool-> Librariesでvideoで検索して出てきた"GStreamer-based video library for Processing."をインストールしました。

さっそくOpneCVのサンプルを動かしてみます。
まずは、BackgroundSubtractionサンプルです。
このサンプルは、BackgroundSubtraction.pdeをダブルクリックしてProcessingを起動後、実行するとdataフォルダーの中にある動画street.movにフレーム間差分処理をした結果が表示されます。
OpenCVを使用しているのは、ソースコードは非常に短いですが処理の大部分がブラックボックスになってしまっています。

さらに、WEBカメラを使用しているサンプルを動かしてみます。
LiveCamTestというサンプルがそれっぽいので、起動するとWEBカメラからの映像が表示され、顔のエリアに緑色の枠が表示されます。

faces = opencv.detect();

の部分がおそらく顔認識なのでしょう。

Android studioで実機実行できないとき

USBドライバも正しくインストールして、さらにデバイスマネージャーからもスマホタブレットがきちんと見えているのに、Android StudioからRunボタンを押すと、エミュレーターが立ち上がっってしまい、実機実行できないことがあります。
これは、実行の設定がEmulatorになってしまっているためです。

設定メニューの Run -> Edit Configurationで、
General -> Target Device の設定を USB Device もしくは Show chooser dialog
にする必要があります。

何かの拍子でEmulatorの設定にしてしまうと、結構はまりますのでご注意ください。
私も何度もはまって、必要のないUSBドライバのアンインストールとインストールを繰り返してしまいました。

Android Studio でnative でOpenGLを使って見る

このサイトから、サンプルをダウンロードしてみた。
Samples: Overview | Android Developers

include fileへのパスがつながっていないみたいでビルドできない。
#include
#include
などのところでエラーがでる。
build.gradle を編集すればよさそうな気もするがよくわからない。