FC2ブログ

頭と尻尾はくれてやる!

パソコンおやじのiPhoneアプリ・サイト作成・運営日記


Kerasに自作データセット(画像)を与えてみる

MNIST(手書き文字認識)で使うpng画像、つまり手書き文字の画像がフォルダ内にあるとして、、、
それを読み込んでKerasで使うことはできるか?というのを確認した。

MNISTに取り組む場合、それが機械学習のHello World的な位置付けということもあってトレーニングデータ、テストデータがどういう風になっているのかなんて気にすることはない。ただ使うだけ、という具合になってる。

KerasでCNNを使った強化学習をやろうとしているので、自作データを学習に使えるのか?というのを確認しておきたかった。

png画像フォルダ

↑幸いMNISTで使うpng画像がすでにある。だいぶ前にpng画像からtfrecordファイルを作成できるか確認するために作成したpng画像だと思う。
これを使ってテスト用のデータセットを作成し、Kerasに与えて期待する結果を得られるかやってみる。

KerasのMNISTで数エポック学習させ、テストデータに対する評価の結果がこれ↓
Test loss: 0.03404631294881692
Test accuracy: 0.988
↑これはサンプルコードのままのデータセットの場合。


次に自分で10,000枚のpng画像を1枚ずつロードしてテスト用のデータセットを作成した。
def loadTestData() :

    x =  np.array([])
#    y = [] #リストの場合
    y =  np.array([]) 
    
    for ite in range(10) :
        fileIte = 0
        while(1) :
            filePath = BaseFolder + "%d/%04d.png"%(ite,fileIte)
            if (os.path.exists(filePath)) :
                imgarr = makeArrayFromOneImage(filePath)

                x = np.append(x , imgarr)
#                y.append(ite)#リストの場合
                y = np.append(y , ite)
                
                fileIte += 1
            else :
                break

    return x, y


def makeArrayFromOneImage(filePath) :
    pngImage = Image.open(filePath)
    size = pngImage.size
    imgarr = np.array([])
    
    for y in range(size[0]) :
        for x in range(size[1]) :
            r = pngImage.getpixel((x,y))
            imgarr = np.append(imgarr,np.array([r]))

    return imgarr
↑コードはこんな感じ。
loadTestData()で読み込んだ1枚の画像データをnumpyのarrayなりリストに入れていく。TensorFlowだとデータセットはnumpyでもリストでもよかったと思うが、ここでは画像データに関してはreshapeとかしているのでリストじゃダメ。
makeArrayFromOneImage()で1枚のpng画像から1ピクセルずつ輝度を拾ってnp.arrayに入れていく。

Test loss: 0.03404631299573957
Test accuracy: 0.988
↑その結果。当然NNの学習度合いは同じ(係数は全く同じ)なので、同じ結果になるはずなんだが、、、精度が何かしら違うのか途中から違ったりする。まあいいか。
なお、正解データにリスト、np.arrayのどちらを使っても結果は同じだった。

とりあえず、png画像をロードしてデータセットの作成ができたのは確認できた。

<< MacでPHPを動かす時のメモ  TopPage  macOSのContainer Viewのcontrollerの参照を得たい >>

コメント


管理者にだけ表示を許可する
 

トラックバック

トラックバックURL
http://ringsbell.blog117.fc2.com/tb.php/1230-44e909d9




Copyright ©頭と尻尾はくれてやる!. Powered by FC2 Blog. Template by eriraha.

FC2Ad