剥いだ布団とメモランダム.old

情報系のことをかいてゆく

pipでmatplotlibとscipyが入らなかった時の対処

CNNフレームワークのcaffeのセットアップをしている時に、
pip使ってたらmatplotlibとscipyが導入できていなかったので、対処のメモ。

OSはUbuntu 14.04 LTSです。

正直、エラー表示を読めばすぐ分かることなんだけど…ね…。

$ sudo pip install matplotlib
$ sudo pip install scipy

そのまんまこれやるとエラーでてインストールができない。
matplotlibはfreetype周りのバグ、scipyはfortranのCompilerが入っていないことが原因だった。

解法

freetypefortranのパッケージをそれぞれ入れてから再度pip install。

$ sudo apt-get install libfreetype6-dev
$ sudo apt-get install gfortran
$ sudo pip install matplotlib
$ sudo pip install scipy

めでたし、めでたし。

今年のここまでの振り返りと最近の興味

完全に雑記。
6月過ぎてからは無茶苦茶忙しくて、色々とここにまとめておきたい内容はあるのだけどもまとめられないっといったところ。
何もまとめてないと忘れてしまいそうなので、最近考えてることとかをしっかりまとめておこうと思う。

そういえば目標立ててたよな

今年のはじめに目標を立ててました。

  • 機械学習をもっと研究する、もっと使ってみる
  • OpenCVを使って何かを作る
  • CUDAの学習をする
  • 英語の再学習
  • 小説を読む

こんな感じの目標だった。

機械学習をもっと研究する、もっと使ってみる

卒業研究も機械学習(特にDeepLearningと呼ばれている領域)を用いた研究をアサインされたので、がっつり研究しているところ。
視覚情報に基いて学習を行う内容の研究なので、春先にネオコグニトロンから入り、畳み込みニューラルネットワークの理論の学習、実践へと進んでいった。
今感じていることとしては、いくつか興味深いケース(問題に対するアーキテクチャの構築、どのような正則化を行うべきか、上手く分類問題が解けない場合)があるので、そういったものに対して検証をおこなっていくと面白そう。

加えて、研究では畳み込みニューラルネットワークを使っているけれども、興味自体は制約付きボルツマンマシン、ベイジアンネットワーク、自己組織化マップに移ってきてる。
これは理由が色々とあるけれども、ある程度畳み込みニューラルネットワークが分かってきて、もっと複雑なことや他の問題を解きたいということを考えた時に、こういった技術が必要そうな感じがするということ。
Deep Learningの次の世代(CNNやAE、RBMの次の学習アルゴリズム)まで考えると、やはり畳み込みニューラルネットワークばかり研究している場合でもないかな、と。

畳み込みニューラルネットワークやオートエンコーダなどについて思っていることとかも、そのうちここに書けたらいいと思う。

OpenCVを使って何かを作る

今やってる研究でもHaar-like特徴量を使ってみたり、ヒストグラムをいじってみたりしているので、たくさんプログラムは書いた。
Matの扱いやライブラリの中身のかなり理解できた気がする。でも、まだまだいじっていないクラスもあるので時間があるときにやってみたい。今年中はこれ以上は厳しいかも。

CUDAの学習をする

これは一番達成できていない目標。GPUを使ったCNNフレームワーク自体は利用しているけれども、CUDAのコーディング自体はあまりできていない。
並列処理をして高速化しておきたいコードがいくつかあるので、研究が一段落したらやっておきたい。
(k-means++とかAutoencoderとかBackPropagationとか…)

英語の再学習

2月から3月にかけてアイルランドへ語学留学へ行ってきた。
1ヶ月しか行かなかったので、急に英語力が上がったわけではないけれども、少なからずモチベーションにはなった。
英語の論文を読んだり、自分で論文を書いていると表現をあまり知らないことに悩まされているので、ちょっと何かしないと。
英語学習に使えそうなメソッドとかソフトウェアがあれば見てみようかな。

小説を読む

夏になってから移動時間に読むようになった。
小説に限らず、色々な分野の本を読みたいなと思っているので、そのうち色々なジャンルの本を読む試みをやってみる。

Python + gnuplot でジュリア集合を描く

かなりまえのエントリーでマンデルブロ集合を描くっていのをやりましたけど、
今度はジュリア集合を描いてみよっていうことで、
前につくったプログラムをちょっと変えてジュリア集合を描いてみました。

また例によって、

  • Pyrhonでプロットデータ出力
  • gnuplotでグラフ描画&画像ファイル出力

っていうプロセスでやってみました。

続きを読む

void C++のポインタ備忘録::超基礎編()

暑くなった頃に研究室のB3にはCのプログラミング課題が課せられるよなーってことを思い出して、
その時用に出来るだけポインタの動作がわかりやすいものでも作っておくか、ということで。
今回の記事で扱った内容はCでも一緒のはず。

今回は本当に超基礎的な内容。
配列編、関数編、クラス&インスタンス編、CUDA編あたりはそのうち書こう。

コンパイルgcc version 4.4.7 20120313 (Red Hat 4.4.7-4)でやってます。

/*
	void C++のポインタ備忘録::超基礎編()
	author	しまだ
*/

#include <iostream>

using namespace std;

int main(int argc, char const *argv[])
{
	int value = 100;
	int* ptr;			// intポインタ型
	// int *ptr;			//こっちの宣言の仕方でも一緒(こっちの方が多いかも)

	/*
		そもそもint型とintポインタ型では「型」が違うので以下のはNG
		(コンパイラに型が違うと言われるかも)

		ptr = value;			
	*/

	cout << "ptr    = " << ptr << endl;	// アドレスが出力される
	cout << "&value = " << &value << endl;	// これもアドレスが表示される
	cout << endl;

	// なのでこういうことはOK
	ptr = &value;

	cout << "ptr    = " << ptr << endl;	// アドレスが出力される
	cout << "&value = " << &value << endl;	// 同じアドレスが表示される
	cout << endl;

	/*	<ポイント.1>
		ポインタ型でない変数に&をつければ変数のあるアドレスが得られる
	*/

	// だからといってこういうのは出来ない(コンパイルエラー)
	// &value = ptr;	(&valueはアドレスを返すが、変数ではない)


	//________________________________________________________________



	// "ポインタ型に入っているアドレス"にある値が欲しい時は、*をつければいい
	cout << "*ptr   = " << *ptr << endl;	// 100が出力

	// だからこういうこともアリ
	int a = *ptr;
	cout << "a      = " << a << endl;	// 100が出力
	cout << endl;


	// ここで、aとvalueのアドレスを確認してみる(一緒ではないことに注意)
	cout << "&a     = " << &a << endl;
	cout << "&value = " << &value << endl;
	cout << endl;
	// *ptrというのは、ptr番地の値を見に行ってるだけ


	// ちなみに、*ptrに値を代入するとptr番地の値が変更される
	*ptr = 1234;
	cout << "*ptr   = " << *ptr << endl;	// 1234が出力
	cout << "value  = " << value << endl;	// 1234が出力
	cout << "a      = " << a << endl;	// 100が出力
	cout << endl;

	/*	<ポイント.2>
		ポインタ型変数に*をつければ、
		「ポインタ型に入っているアドレス」に入っている値をみにいく
		(おそらくここが一般的な混乱の原因か?)
	*/

	//________________________________________________________________


	// ここでptrにaのアドレスを代入してみる
	ptr = &a;

	// だからといってvalueのアドレスまで変更されるわけではない(一応確認)
	cout << "&a     = " << &a << endl;
	cout << "&value = " << &value << endl;
	cout << endl;

	// ptrと&a、*ptrとaが一緒かどうか確認する
	cout << "ptr    = " << ptr << endl;	// アドレスが出力される
	cout << "&a     = " << &a << endl;	// これもアドレスが表示される

	cout << "*ptr   = " << *ptr << endl;	// 100が出力
	cout << "a      = " << a << endl;	// 100が出力


	return 0;
}

実行結果

ptr    = 0x0
&value = 0x7fff55c439fc

ptr    = 0x7fff55c439fc
&value = 0x7fff55c439fc

*ptr   = 100
a      = 100

&a     = 0x7fff55c439ec
&value = 0x7fff55c439fc

*ptr   = 1234
value  = 1234
a      = 100

&a     = 0x7fff55c439ec
&value = 0x7fff55c439fc

ptr    = 0x7fff55c439ec
&a     = 0x7fff55c439ec
*ptr   = 100
a      = 100

このレベルだとあまり需要がない気がする。

macでenscriptを使ってソースコードを見やすく印刷する

研究をやっていたり、課題をこなしていたりすると、
ソースコードを印刷して提出しろということを言われたりします。

今まではeclipseの印刷機能を使ってみたり、wordの書式設定をいろいろいじってみたりしていたのですが、どれも面倒だったり見やすく印刷できなかったりするんですよね。

今回はenscriptというものを試してみたので、備忘録。

enscriptってなに

基本的にはテキストをPostScriptにして出力してくれるものです。(htmlなどにも出力できます)
プログラムのコードを解析できて、予約語の強調表示や行番号表示などをしてくれます。
なので、それなりに見やすいソースコード印刷ができるぞっていう話です。

注意しておきたいのは、日本語非対応。残念。

続きを読む

アイルランドへ短期留学します

お久しぶりです。本日14日から1ヶ月ほどアイルランドで短期語学へ行ってきます。
日本でいろいろを残したなか、行くのはちょっと本意ではないけれども…。
向こうでもネットはつかえるらしいので、Javaのコーディングとこれまでつくったコードのアウトプットも時間があればやりたい。

留学中の写真とかは、
http://sheemaaireland.hatenablog.com/
ここにあげていろいろ書こうかと思ってる(余裕があれば)。

そろそろ支度を…。

個人的に2014年の目標を立てる

あけましておめでとうございます。
今年ものんびり記事を更新していきたいと思います。

実は去年は何も目標を立てずに過ごしてきたわけですが、
こうやって外にアウトプットできる場もあることだし、
せっかくなので2014年の目標(やりたいこと)を立ててみます。

  • 機械学習をもっと研究する、もっと使ってみる
  • OpenCVを使って何かを作る
  • CUDAの学習をする
  • 英語の再学習
  • 小説を読む


5つくらいが妥当だと思うので、5つ挙げてみました。

2013年では機械学習の勉強をしようと思っていたんだけど、
まだまだ感がすごかったので、もっと勉強します。なにか専門書を読む。
試したことはここに記事としてまとめておこうと思います。

研究内容の関係上、OpenCVが使えるなった方をいいと、
それと画像関係のことって面白いので、OpenCVを使ってなにかプログラムを色々つくろうかと思っています。もしかしたら、機械学習と絡めるかもです。

CUDAは興味はあったんですが、研究室でなかなか良いGPUが使えるとあって、やろうかと思っています。


去年ブログを書いていって気づいたんですが、
試したこと、考えたことはなるべくその日中に更新しなきゃいけないですね笑

やっぱりこうやってまとめると色々と意識してブラッシュアップにもつながるので、
続けていきたいです。