pandazx's blog

データ分析など雑多な技術ブログ

Ruby: MessagePackのファイル読み書きでエラー

MessagePackしたファイルの読み込み時にエラーで、少しハマったのでメモ

test.rb:27:in `unpack': extra bytes follow after a deserialized object (MessagePack::MalformedFormatError)

こうじゃなくて

File.open(outpath, "w") do |fout|
  fout.puts(links.to_msgpack)
end

こう

File.open(outpath, "w") do |fout|
  fout.write(links.to_msgpack)
end

改行コードがね。。。

一般物体検出のFaster R-CNNについて

Faster R-CNNには本家Matlab版とPython版のプログラムが公開されている。

Faster R-CNNについては、上記リポジトリのREADME.mdを参照して欲しいが、 日本語のslideshareもある。

Python版しか実行確認していないが、以下の手順で実行できる。

前提:Ubuntu14.04, Anaconda2, CUDA7.5, cuDNN v4, Caffeはインストール済み

ライブラリをインストール

後はpy-faster-rcnnのREADME.mdに従えばOK。デモ画像に対する一般物体検出まで行える

コマンドだけ知りたい人は以下の方が参考になる。

ただし、make前に以下の設定が必要。

Makefile.config から以下をアンコメント

USE_CUDNN := 1
WITH_PYTHON_LAYER := 1

以下を環境に合わせて設定

ANACONDA_HOME := $(HOME)/anaconda2
PYTHON_INCLUDE := $(ANACONDA_HOME)/include \
                  $(ANACONDA_HOME)/include/python2.7 \
                  $(ANACONDA_HOME)/lib/python2.7/site-packages/numpy/core/include
PYTHON_LIB := $(ANACONDA_HOME)/lib

MATLABにToolboxをアドオン追加

MATLABをインストール後、アドオンを追加する方法がすぐにわからなかったのでメモ

まず、Toolboxを購入。評価版の場合は特になし。

MATLABインストーラを実行すると、最後の方にインストールするコンポーネントを 追加するページがある。MATLAB本体はインストール済みとなっている。

ここで、Toolboxにチェックしてインストール。

ちなみに、以下のブログに既に書いてあった。

上記以外に以下の方法もあるらしい

Ubuntu 14.04 にVNC serverを構築

なぜか、普通のやり方で構築すると、ログインした際に灰色の画面(gray screen)になってしまう現象に直面。 以下のサイトを参考に対応できた。

How To Setup VNC For Ubuntu 12 | DigitalOcean

最後のセキュアにするところは、ご自由に。

ちなみに、/etc/init.d/vncserver で起動するが、上記サイトでは決め打ちになっていたので、 USER, DISPLAYはserviceコマンド実行時にパラメータを渡すように修正した。

蛇足

操作を誤ったからか、試行錯誤している最中におかしなことをしていたか、 以下のUbuntu 14用のやり方も、ほぼ上記と同じだと思うのだが、以下ではうまく行かなかった。

How to Install and Configure VNC on Ubuntu 14.04 | DigitalOcean

Word2vecの仕組みの勉強

Word2vecについて個人メモ(私の理解)。詳しく知りたい人は参考文献を参照して欲しい。参考文献先には元論文のリンクもある。

Word2vecは二層のニューラルネットワーク(NN)で構成される。学習して計算された重み付けの値により、学習データに含まれる情報を数値ベクトルで表現できる。

NNの隠れ層、出力層のノード数は単語数x200次元程度の次元数。ただし、出力層はコンテキストサイズごとに同じノード数のものを用意する。

コンテキストサイズとは、対象となる単語の前後、何単語まで、その出現位置の関係を学習するか、というもの。サイズが1なら、一つ前に現れる単語、一つ先に現れる単語を学習する。

これは、近い場所に現れる単語は意味的に近い、という考え方を前提としている。

各単語が200次元で表現されるが、これを分散的意味表現と呼ぶ。共起頻度を学習する場合は単語数x単語数の次元数が必要となり、通常、こちらの方が圧倒的に次元数が大きい。こちらは分布的意味表現と呼ばれる。

何らかの単語をNNに入力すると、前後に現れる単語の確率ランキングが得られる。コンテキストサイズが2なら、2つ先と前の確率ランキングも得られる。

Word2vecの使い方でよく説明されるものに、フランス-パリ+東京で、日本が得られる、という計算例がある。

私の理解では、これはフランスから、パリを引くと、パリに意味的に近い単語が除かれる(おそらく、該当単語の値が引かれるので、フランスの確率ランキングにおいて、パリの確率ランキングの上位の単語が下位になる)。次に、東京を足すので、東京に意味的に近い単語が上位に来る。フランスは国であるので、元々、日本とは意味的に近く、パリが引かれて、東京が足されるので、東京に最も意味的に近い国、つまり、日本が確率ランキングの最上位に来るという流れだと思われる(あまり、自信はない)

NNを使うからというのもあるが、なぜ、この方法で意味的に近い単語の表現が可能になるかは、理論的にはわかってないらしい。

参考文献
http://business.nikkeibp.co.jp/article/bigdata/20141110/273649/


Ubuntu server 14.04で日本語入力できない

Mozcが出てこない。

以下のコマンドで言語関連ライブラリをインストール

sudo apt-get install fcitx fcitx-mozc fcitx-libs-qt5 fcitx-frontend-qt5
sudo apt-get install language-pack-ja

右上のEnを右クリック→Text Entry Settingsで、 +アイコンから、Japaneseを追加。これで、日本語キーボード配列で入力が可能になるはず。 まだ、日本語文字が打てるわけではない。

他サイトを見ていると、ここにMozcが表示されるようなのだが、されない。

右上の歯車アイコン→System Settings→Language Supportで Keyboard input method として、 fcitx を設定。 一度、ログアウトしてログイン。

これで右上にキーボードアイコンが表示されたはず。

キーボードアイコンをクリック→Configure Current Input Methodで、 +アイコンから Mozcを追加(ここの選択リストの表示領域が異常に小さい)

Mozcを一番上に持っていく(プラスアイコンの右の方にあるボタンで移動できる)

これで、半角/全角キーでいつも通りに切り替えられるようになる。

補足

キーボード配列を日本語と英語に切り替えるには、Super+Space

Superとは、ウィンドウズキーのこと

NVIDIAドライバ環境でUbuntu serverにGUIインストール

大いにハマった。

以下の順に行うことで、うまくいった。

  1. Ubuntuインストール
  2. taskselでデスクトップ環境をインストール
  3. NVIDIAドライバをインストール

最初に3と2を逆にやったためか、Xorgの設定がうまく行われず、startxすると画面が真っ黒になり、どうにもならなかった。 NVIDIAドライバはインストール時にXorgの設定を自動的にやってくれるので、それに任せるのが一番。

以下のサイトを頼りに設定したが、私の環境ではうまくいかなかった。

startxすると画面真っ黒から、タイムアウトして戻ってきてしまう。 ログを見ると、GLXモジュールがロードできない現象だったが、解決できなかった。