1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
| from __future__ import print_function import argparse
import chainer import chainer.functions as F import chainer.links as L import chainer.initializers as I from chainer import training from chainer.training import extensions from PIL import Image import numpy as np
class MLP(chainer.Chain): def __init__(self, n_units, n_out): w = I.Normal(scale=0.05) super(MLP, self).__init__( conv1=L.Convolution2D(1, 16, 5, 1, 0), conv2=L.Convolution2D(16, 32, 5, 1, 0), l3=L.Linear(None, n_out, initialW=w), ) def __call__(self, x): h1 = F.max_pooling_2d(F.relu(self.conv1(x)), ksize=2, stride=2) h2 = F.max_pooling_2d(F.relu(self.conv2(h1)), ksize=2, stride=2) y = self.l3(h2) return y """ 自分で用意した手書き文字画像をモデルに合うように変換する処理 """ def convert_cnn(img): data = np.array(Image.open(img).convert('L').resize((28, 28)), dtype=np.float32) data = (255.0 - data) / 255.0 data = data.reshape(1, 1, 28, 28) return data
def main(): inputimage = '3.png' modelfile = 'result/MLP.model' unit = 1000
print('自分の手書き文字を学習したモデルで評価してみるプログラム') print('# 入力画像ファイル: {}'.format(inputimage)) print('# 学習済みモデルファイル: {}'.format(modelfile)) print('')
model = L.Classifier(MLP(unit, 10)) chainer.serializers.load_npz(modelfile, model)
img = convert_cnn(inputimage) x = chainer.Variable(np.asarray(img)) y = model.predictor(x) c = F.softmax(y).data.argmax() print('判定結果は{}です。'.format(c))
if __name__ == '__main__': main()
|