「ほっ」と。キャンペーン

カテゴリ:プログラム言語( 43 )

自分メモ
すごい俺得

cifar10データセットは以下
CIFAR-10 and CIFAR-100 datasets

bmpでファイルに保存する、というソースが意外に見つからない。

extract_cifar10_bmp.py
import cPickle
import argparse
from PIL import Image
import numpy

# 引数で、cifar10ファイルと、何番目のbmpを取り出すか指定する
# ex) extract_cifar10_bmp.py cifar-10-batches-py/data_batch_1 0
#   data_batch_1.0_leptodactylus_pentadactylus_s_000004.png.bmp を作成

parser = argparse.ArgumentParser()
parser.add_argument('dfile', help='cifar10_file')
parser.add_argument('nth', help='number of image(0-)')
args = parser.parse_args()
dfile = args.dfile
nth = args.nth

# cifar10ファイルを開いて読み込む
fh = open(dfile, 'rb')
pickles = cPickle.load(fh)
fh.close()
one_pickle = pickles['data'][int(nth)] # 指定番目の画像データ
# ↑ 3072 要素の配列 ([R....G....B...]のように並んでいる)

# 出力ファイル名作成

outfile = dfile + '.' + nth + '_' + pickles['filenames'][int(nth)] + '.bmp'

# 3072の一次元配列を、3x32x32 の三次元配列に変換
# [ [R(32x32)], [G(32x32)], [B(32x32)] ] の形式になる

3darr = numpy.reshape(one_pickle, (3,32,32))

# RGB のように並べる
# [ [ RGB ... 32個], [ RGB ... 32個],... 32個 ] の形式に変換

rgbarr = numpy.rollaxis(3darr, 0, 3)

# PIL に変換してファイルに出力
pilImg = Image.fromarray(rgbarr, 'RGB')
pilImg.save(outfile, 'BMP')
print outfile


遅ればせながら、ようやくpythonを書き始めたので、
まだエラー処理とかわからないんです(笑

追記:
pngで保存する場合は、以下が参考になりそう。
https://github.com/mitmul/chainer-cifar10/blob/master/dataset.py
87行目あたりとか
[PR]
by xiaoxia | 2016-03-01 19:49 | プログラム言語 | Comments(0)
libsvm (e1071) のグリッドサーチで2点ほど。
実行環境は windows です。

グリッドサーチの分割方法


グリッドサーチの際、常に分割は同じなのか。
例えば、 cross=3 と指定して、複数回実行したら、
常に同じデータが同じグループになって実行されるのか。
毎回ランダムなデータがランダムにグループ分けされて実行されるのか。

ソースを見てみたところ、
R で書かれたソース(tune.R)では、特にランダマイズされていなかったが、
C で書かれたソース(Rsvm.c)では、ランダマイズされていた。
windows で実行する場合は、
多分 R ファイルを実行するのではなく dll を呼んでいると思うので、
ということであれば、毎回ランダムなのだろうなぁと思う。
想像でしかないのだが。

グリッドサーチの結果の正答率


SVM のチューニングのしかた(2) - ほくそ笑む
http://d.hatena.ne.jp/hoxo_m/20110325/p1
で、以下のようにある。
グリッドサーチの結果としてベストパラメータを出力しています。上記のプログラムを実行すると、結果は下記のように出ました。
- best parameters:
gamma = 0.1 ; cost = 1 ;
accuracy: 97.33187 %

gamma=0.1, cost=1 の組合せのとき、正答率 97.3 % を出していることがわかります。

gamma=0.1, cost=1 のときに、cross=3 であれば、
3回の svm が実行されていると思うのだが、
accuracy は一体何の数字なのか。

割とあっさり 100% が出たりするが、
3回実行してそう簡単に 100% が出るとは考えづらいので、
加算平均ではないような気がする。
てことは、3回の中の最高正答率なのかなという気もするが、
100% のときは dispersion (分散)も 0 と出るので、
やっぱり加算平均かもしれない。

なわけで、ソースを見てみた。
結果、3 回実行の中での平均値を選択していた。
それはそれでなんかびっくり。
3 回実行を更に複数回す設定 (nrepeat) をしている場合は、
nrepeat 回の中での最小エラー率が選択されるので、
やっぱりエラー率は 3 個得られて、
そこから平均を出すぽい。

あっさり 100% が出ても、
平均を取った結果の 100% なら、
ある程度の余裕を持って識別境界が決定されていて、
オーバーフィッティングの心配はないと思っていいのかな。
[PR]
by xiaoxia | 2015-05-20 19:35 | プログラム言語 | Comments(0)
昨日 windows7 ruby に MessagePack-RPC を入れ(ようとして脱落し)た記事を書いたけど、
もうホントに、心底、脱落したわよ(笑
だから Ubuntu に入れることにしちゃった♪
で、とりま動いたので、ここまでで困ったことをメモしておくよ。

動かなかったり、エラーが出た場合の
主に環境を作る段階での確認事項など。

確認すること



実際に実行されるファイル
「ruby」で実行されるファイルのパスやバージョン
「gem」で実行されるファイルのパスやバージョン
バージョン
ruby -v で見られるバージョン
gem -v で見られるバージョン
以下のリンク先
/etc/alternatives/ruby
/etc/alternatives/gem
/usr/bin/ruby
/usr/bin/gem
gems の各種情報
gems env で、リポジトリを調べる(httpsだとダメな場合あり)
gems list で、インストールされているパッケージやバージョンを確認


不整合がある場合は、何とかして修正すること。
基本的に apt-get だの gem だので正式に直すのだけど、
リンク先については、手でモリモリ直すものみたい。

ruby1.8, ruby1.9, ruby2.0 など、それぞれのバージョンで
gem の update のやり方などが違うようなので、
ちゃんと確認すること。
特に 1.8 から 1.9 に上がったあたりで、
gem ががっつり変わったぽいよ。
lib の格納場所なんかも変わってるらしいよ。

そのた注意点



・プロクシのある環境
 環境変数にプロクシを指定しても、gem が動かない場合がある
 sudo をつけて実行するときなど、
 gem install などをする際は、-p http://IP:port/ のように指定してみる

・MessagePack のサーバを実行後、EADDRINUSE 系のエラーが出た場合
 ポートが使用中で bind できないという意味
 使用されていないか調べ、当該ポートを使用しているプロセスをkillする
 「netstat -anp」などで表示できる

思いついたらまた追加するわ。
[PR]
by xiaoxia | 2014-10-10 18:38 | プログラム言語 | Comments(0)
今日は ruby の MessagePack を試してみたよ!
これももちろん仕事だよ!
我ながら色々手出してるよね!

そして解決していない内容だから、
あんまり参考にならないと思うよ!

インストール


こんな感じでインストール開始。
gem install msgpack-rpc


通常なら gem install をすると、
Fetching ... というようなメッセージが出るが、
何も表示されない。
そして
 突然コードページが変わる
 「マシン名#」というプロンプトが出る
という状態になって、そこで停止。
プロンプトが出たので「exit」で抜けてみたら、
mkmf.rb あたりのエラーが。
キャプ取るの忘れたんだけど、確かこんな感じの。
checking for main() -l *** extconf.rb failed ***


gem fetch のみ実行すると正常に実行できて、
gem が落ちてくるので、
gem ファイルを指定して gem install --local をしてみたが、
同じエラーが出て、進まない。
原因がわからない(あんまり追ってない)。

いろんなパッケージを入れてみる


で、とりま Rails と DevKit をインストールしてみた。

再度 msgpack-rpc をインストールしてみる。
> gem install msgpack-rpc
Temporarily enhancing PATH to include DevKit...
ERROR: While executing gem ... (Errno::ENOENT)
No such file or directory @ realpath_rec - D:/Ruby/21-x64/lib/ruby/gems/2.1.0/gems/cool.io-1.1.1

cool.io がないって言われても…。

cool.io を単独でインストールしてみた。
これは成功した。

再再度 msgpack-rpc をインストールしてみる。

stat_watcher.c: In function 'Coolio_StatInfo_build':
stat_watcher.c:249:13: error: 'ev_statdata' has no member named 'st_blksize'
stat_watcher.c:250:13: error: 'ev_statdata' has no member named 'st_blocks'
make: *** [stat_watcher.o] Error 1

make failed, exit code 2

ev_statdata ってなにこれ?
まだダメぽい。
ちょっと…かなりイヤになってきた…。

gem list をしてみたら、
messagepack-rcp の依存関係にある rev が入っていない。
gem install rev をする。
成功。
しかし、messagepack-rpc のエラーは変わらず。

openssl-nonblock が必要という話も見たので、
ここのページを見て、 openssl-nonblock も入れてみたが、
このパッケージ自体のインストールに失敗。
rubyのmsgpack-rpcをインストールしようとしたらできなかった - うどん駆動開発
http://d.hatena.ne.jp/r_takaishi/20100914/1284455719


完全に脱落しました(´・ω・`)

もうやだorz


この後、Ubuntu で試したら、さらっと行きました。
ひょっとして Win7(64bit) て、messagepack-rpc が入らない?
[PR]
by xiaoxia | 2014-10-09 19:03 | プログラム言語 | Comments(0)
Windows で emacs を使っていて、
SJIS 以外使わないし、
改行コードも CRLF で良いから、
固定になりませんかね、という相談を受けた。
そうねー。
ウチの部署で emacs-lisp 書く人なんて
私だけだろうなー(^^;;

というわけで、やる気が出たので調べてみた。
かなり簡単。
以下を .emacs に書いておけばOK。
強力すぎてテストが大変だった(笑)

(defadvice find-file (around coding-system activate compile)
     "どんなファイルも SJIS DOS として読み込み"
     (let ((coding-system-for-read 'sjis-dos))
       ad-do-it))
(ad-activate 'find-file)

(defadvice save-buffer (around coding-system activate compile)
     "どんなファイルも SJIS DOS で保存"
     (let ((coding-system-for-write 'sjis-dos))
       ad-do-it))
(ad-activate 'save-buffer)


参考:
Emacsユーザのためのadvice - Journal InTime(2009-12-24)

こんな関数があるんだねー。
初めて使った。

文字コード関連はこうしたいって要望が一番出るあたりだよね。
関連:
女プログラマってどうよ? : Emacs文字コード自動認識が失敗
[PR]
by xiaoxia | 2012-03-19 18:26 | プログラム言語 | Comments(0)
HBase でデータを削除したい場合、
特定の row は delete だの deleteall だので
操作できるのだけど、
カラムファミリとかカラム修飾子とかで操作するのは面倒くさい。

java で書く例はよく見るけど、
ruby で書く例はあまり見かけない気がする。
ので、メモっておく。
あまりにもカンタンだから?

実行方法
> more thisfile.rb | hbase shell > output.log



# 指定のカラム修飾子のデータは削除しない

import org.apache.hadoop.hbase.client.HTable
import org.apache.hadoop.hbase.client.Get

tableName = "MYTABLE"
tableObj = HTable.new(tableName)

row = "myrow"
fam = "myfamily"
getObj = Get.new(row.to_java_bytes)
getObj.addFamily(fam.to_java_bytes)
result = tableObj.get(getObj)

if !result.isEmpty()
 for kv in result.list()
  family = String.from_java_bytes kv.getFamily()
  qualifier = String.from_java_bytes kv.getQualifier()
  # quali1, quali2 は削除しない
  if qualifier != "quali1" && qualifier != "quali2"
   column = family + ':' + qualifier
   print tableName + ', ' + row + ',' + column + "\n"
   deleteall(tableName, row, column)
  end
 end
end


参考:
http://svn.apache.org/repos/asf/hbase/tags/0.20.3RC2/bin/HBase.rb
http://svn.apache.org/repos/asf/hbase/trunk/src/main/ruby/hbase/table.rb
[PR]
by xiaoxia | 2012-01-25 22:21 | プログラム言語 | Comments(0)
ListPreference で数字の値を設定したかった。
で、かつ、それを初期値に設定したかった。

ListPreference を作って
listPreference.setDefaultValue("10");

などをやっても、
以下のページが仰言るように確かに全然効いてくれない。
そしてなぜかアルファベットだけにしても、効いてくれなかった…。
参考:AndroidのListPreference使うときの注意点(Flex、AIR、Java、Androidなど)

じゃ明示的に設定してみたらどうだろうと思ってやってみた。
SharedPreferences.edit().putString("listPref", entVals[3]).commit();

参考:動態産生 ListPreference 選項(Lucifer - Heosphoros: Android Tips 開發小技巧)
これはめでたく成功!
このページの人も「不是什麼漂亮的解法」と仰言るとおり、
あんまり美しくないんだけど(^^;;
当初上手く行かなかったのだが、
これは SharedPreference の読み出しキーの設定のタイミング
listPreference.setKey("listPref");

が遅かったためのようだ。

結果的に、上手く動いたソースが以下。

ListPreference listPreference = new ListPreference(this);
listPreference.setKey("listPref"); // はじめのウチにキーを設定すべきっぽい
listPreference.setTitle("List Preference");
listPreference.setSummary("You may chose from multiple choices");
listPreference.setDialogTitle("List Preference");
String[] entries = {"5 Minutes", "10 Minutes", "15 Minutes", "30 Minutes", "60 Minutes"};
String[] entVals = {"5", "10", "15", "30", "60"};
listPreference.setEntries(entries);
listPreference.setEntryValues(entVals);

// ↓これはentValsの要素をこんな感じにアルファベットのみにしてもダメだった
// String[] entVals = {"a", "b", ....}
//なんで???
//listPreference.setDefaultValue("d");
// ↓うまく動いた
sharedPreferences.edit().putString("listPref", entVals[3]).commit();

[PR]
by xiaoxia | 2011-09-05 17:56 | プログラム言語 | Comments(4)
タイトルバーの背景色を変更したくなった。
xml を使用して変更する例は多いのだけど、
xml を使わないでやってみたかったので、
ゴリゴリしてみた。

初心者なものでお作法がわからない。
すごくイケナイコトをしている気もする…。
お作法を方法を教えていただけると喜びます。
ちょっと調べてみた範囲ではわかりませんでしたの。

タイトルバーを消すとか、
タイトルバーにアイコンを載せるとか、
そのあたりは用意されている。
なのに、なぜか背景をいじろうと思うと、
途端に面倒になるのね。

参考にしたページ
Android Developers | Google グループ
How to set logo in the title bar dynamically

Android 2.3.3 で動作確認しました。

public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  // タイトルにしたい文字列
  TextView title = new TextView(this);
  title.setText("new my title");
  // (略)
  // タイトルバーをいじる場合、以下の行は必須
  // setContentView よりも前に入れる!
  requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
  try {
    // こんな風にタイトルバーのリソースIDを取っていいのかしら…
    int titleId
      = (Integer) Class.forName("com.android.internal.R$id")
       .getField("title_container")
       .get(null);
    // ViewGroup にキャストするのがミソだと思う
    ViewGroup viewGroup = (ViewGroup) this.findViewById(titleId);
    // 背景をステキな青に変えてみる
    viewGroup.setBackgroundColor(Color.parseColor("#13386c"));
    // タイトル文字列
    viewGroup.addView(title);
  } catch (Exception e) {
    // (略)
  }
  // (略)
}


いやープログラミングって楽しいわー。
[PR]
by xiaoxia | 2011-08-23 18:12 | プログラム言語 | Comments(0)
Gucchi's Lyrics のタイムタグを LRC フォーマットに変換する

(replace-regexp
  "\\(\\[[0-9][0-9]:[0-9][0-9]\\):\\([0-9][0-9]\\]\\)"
  "\\1.\\2")


xyzzy って \d とかないんだっけな。
lisp の正規表現は他の言語とちょっと違うから、
なんか他の言語の正規表現と混ざるねぇ。

わざわざ投稿するほどのことでもないのだが、
でも実際使おうと思ったときに試行錯誤しちゃうのでメモ。
誰の役にも立たないメモだなぁ(^^;;

  XXX

windows での歌詞表示には、Gucchi's Lyrics を使っている。
もう大分昔に開発が終了しているのに、
このソフトの出来が良すぎて手放せず、
古いバージョンの winamp を使っている。
Gucchi's Lyrics は utf-8 までしか対応していないようで、
音楽ファイルの方に付けられたタグが utf-16 だと落ちちゃう。
しかし、iPodTouch で歌詞表示をするためには、
音楽ファイルの中に utf-16 で歌詞を入れないと文字化けする。
私の中では、Gucchi >>>超えられないキャズム>>>iPodTouch なので、
Gucchi 優先で、音楽ファイルのタグは utf-8 にしている。
Gucchi が utf-16 に対応してくれると良いんだけどな。
ダメならソース公開して欲しい。
自分で何とかする。

大量に持っている歌詞ファイルは、すべて Gucchi 形式である。
一般的なのは、LRC 形式らしい。
今は携帯音楽プレイヤーに iPodTouch を使っているが
近々 Android に乗り換えたいと思っている。
歌詞表示アプリがあれば LRC 形式である可能性が高いだろうから、
そのうち変換するんだろうな、と。
そんなわけで、変換スクリプトを考えてみたわけだ。
[PR]
by xiaoxia | 2011-07-20 17:35 | プログラム言語 | Comments(0)
ただディレクトリ以下を del や rmdir するだけだと、
ディレクトリ以下にサブディレクトリが掘ってある場合や、
そこにファイルがある場合は
思うように削除できない。
マシン起動時にゴミを掃除してくれるアプリもあるけど、
そのためだけにアプリを入れるのはイヤだし、
アプリの起動がレジストリに書かれたりするのはもっとイヤだ。
なるべく軽く済ませたい。

というわけで、以下の bat ファイルを書いて、
スタートアップに置いておくだけで
自動的に実行されるので大層手軽でウマー。

Mac OS X なら .bashrc に1行書けば済むのに。
こういうときは Mac がちょっと羨ましい。
win で bat ファイルを書くことがほとんどないので
慣れていないだけだろうけど。

環境: Windows XP

@rem ここ以下に掃除したいディレクトリを好きなだけ並べる
@rem 指定したディレクトリの下を掃除する
@rem 指定したディレクトリ自体は削除されない
call :sub "C:\DOCUME~1\username\LOCALS~1\Temp"
call :sub "C:\DOCUME~1\username\Recent"
call :sub "C:\DOCUME~1\username\APPLIC~1\Microsoft\Office"
call :sub "C:\WINNT\Temp"
exit /b

@rem 削除する関数
:sub
for /D %%A in (%1\*) DO del /S /Q /F "%%A\*.*"
for /D %%A in (%1\*) DO rmdir /S /Q "%%A"
del /S /Q /F %1\*.*
exit /b


まだ Windows XP を使ってるという点だが、
ウチの部署は、ともすれば半分以上が XP かもしらん。
新規購入やレンタルは Win7 のようだけど。
Vista はほとんど見たことがない。
ちなみに私のマシンは、
PenD 2.8G でメモリ 1G なんで、もう XP くらいしか動かないですよ。
(3年間客先常駐の間に倉庫に入れられててすっかり老頭儿機に…)
[PR]
by xiaoxia | 2011-07-05 17:36 | プログラム言語 | Comments(2)

ダメ女プログラマ&主婦&腐女子&バイオリン弾き


by 小霞