SJE2015 ex08

課題A

SJE/2015/ex05 課題A のプログラムをより汎用に使えるようにするために,次のことをやろう.

step1

  1. 以下のプログラムの fnCat と fnFace の所を自分の環境に合わせて書き換えて,プログラムが動くようにする.
  2. そのプログラムの動作を眺めて(ipythonで動かして,いろいろな変数の中身を表示させたらよい),何をやっているかを理解する
    1. まずは,getData の戻り値 X と label が何を表しているのかを理解しよう
    2. main の側では,getData の戻り値から,X と lab を学習用(L)とテスト用(T)に分ける作業を行っている.この部分がやってることを理解しよう
import numpy as np
import cv2


def getData():

    fnCat = '../cat/cat%03d.png'
    fnFace = '../face100/hoge%03d.png'

    X = np.empty( ( 131 + 100, 64 * 64 ) )
    label = np.empty( 131 + 100, dtype = int )

    for i in range( 131 ):
        img = cv2.imread( fnCat % i, cv2.IMREAD_GRAYSCALE )
        X[i, :] = img.reshape( -1 ) 
        label[i] = 0

    for i in range( 100 ):
        img = cv2.imread( fnFace % i, cv2.IMREAD_GRAYSCALE )
        X[i + 131, :] = img.reshape( -1 )
        if i < 50:
            label[i + 131] = 1
        else:
            label[i + 131] = 2

    return X, label


if __name__ == '__main__':

    X, lab = getData()
    print X.shape, lab.shape

    idxL = np.arange( X.shape[0], dtype = int ) % 2 == 0
    print idxL
    XL, labL = X[idxL], lab[idxL]
    ndatL = XL.shape[0]
    XT, labT = X[-idxL], lab[-idxL]
    ndatT = XT.shape[0]
    print ndatL, ndatT

step2

上記のプログラムを利用して,SJE/2015/ex05 の最短距離法のプログラムを作りなおそう.

ヒント:

In [26]:  labL == 0
Out[26]: 
array([ True,  True,  True,  True,  True,  True,  True,  True,  True,
        True,  True,  True,  True,  True,  True,  True,  True,  True,
        True,  True,  True,  True,  True,  True,  True,  True,  True,
        True,  True,  True,  True,  True,  True,  True,  True,  True,
        True,  True,  True,  True,  True,  True,  True,  True,  True,
        True,  True,  True,  True,  True,  True,  True,  True,  True,
        True,  True,  True,  True,  True,  True,  True,  True,  True,
        True,  True,  True, False, False, False, False, False, False,
       False, False, False, False, False, False, False, False, False,
       False, False, False, False, False, False, False, False, False,
       False, False, False, False, False, False, False, False, False,
       False, False, False, False, False, False, False, False, False,
       False, False, False, False, False, False, False, False], dtype=bool)

In [27]: hoge = XL[labL == 0, :]

In [28]: hoge.shape
Out[28]: (66, 4096)

In [29]: np.mean(hoge, axis = 0)

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-11-16 (月) 12:10:08