CORDEA blog

Android applications engineer

【pylearn2】自分のデータセットを使ってカンタンにGRBMしよう

はじめに

pylearn2というdeep learning libraryは、installしていくつかのサンプルを動かすだけなら割と簡単です。

ただ、いざ自分の用意したデータセットを使用してdeep learningさせようと思うと意外に大変。

というわけで可能な限り簡単に自分のデータセットを使ってGRBM(Gaussian restricted Boltzmann machine)を行うためのパイプラインを作成しました。
なんか間違ってたら適当に修正して下さい。

 

hoge_dataset.pyとgrbm.yamlこちらのプログラムにいくつか私が変更を加えたものです。
私が作成したものではないパラメータ等ありますので、元のリポジトリもご参照下さい。


github.com

 

方法

 

pylearn2のinstallはいろんなところで書かれていますので割愛します。
 

自分のデータセットを作成

識別したい画像を用意してこんな感じで配置
配置する場所はPYLEARN2_DATA_PATH内にディレクトリ作ってその中に
今回は ${PYLEARN2_DATA_PATH}/train_test 内に in ディレクトリを作成したものとして書いています
 

in ディレクトリの名前が紛らわしいと感じたならconvert_image.pyの_DIRを修正して下さい。
 

└── in
    ├── class_1
    │   ├── 1.jpg
    │   └── 2.jpg
    ├── class_2
    │   ├── 1.jpg
    │   └── 2.jpg
    └── class_3
        ├── 1.jpg
        └── 2.jpg
% mv in ${PYLEARN2_DATA_PATH}/train_test/

 

下準備

% PYLEARN2_INSTALL_DIR=$HOME # installした場所
% cd $PYLEARN2_INSTALL_DIR/pylearn2/pylearn2/scripts/tutorials/ # 別にどこでもいいです
% git clone https://github.com/CORDEA/use_images_in_pylearn2.git
% cd use_images_in_pylearn2
% mv *.py $PYLEARN2_INSTALL_DIR/pylearn2/pylearn2/datasets/

実行

% train.py grbm.yaml

重みの可視化

% show_weight.py grbm.pkl

 

設定値など

ディレクトリをtrain_testとして書いてありますので、適宜読み替えて下さい。

各種パラメータについて

grbm.yamlにおけるパラメータで大体設定できるようにしてあります。

  • which_set
    • csvの名前になります
  • base_path
    • 自分のデータセットを置いたディレクトリへのPATHです
  • image_to_csv
    • Trueにすると in ディレクトリにあるimageをcsvにしてから学習に移ります
  • image_size
    • imageの大きさです。defaultで128ですがコンピュータの処理性能等や目的に応じて。
  • color
    • defaultでFalseです。Trueにすると色情報を持ったcsvになりますが、次元数が3倍に。
  • save
    • defaultでFalseです。TrueにするとnpyファイルをPYLEARN2_DATA_PATH/train_test/に保存します。既にnpyファイルが存在する場合はcsvファイルではなくnpyファイルを読み込みます。

 

作成されるファイルについて

  • ${PYLEARN2_DATA_PATH}/train_test/train.csv
    • imageから作成したcsvファイル
  • ${PYLEARN2_DATA_PATH}/train_test/comparative_table.name
    • labelとディレクトリ, 画像名の対応表。いらないような気がします
  • ${PYLEARN2_DATA_PATH}/train_test/*.npy
    • numpyのファイル, 詳しくはhoge_dataset.pyを参照して下さい。saveがTrueである場合のみ作成及び読み込みを行います。