#coding:utf-8 import numpy as np import chainer from chainer import cuda, Variable, FunctionSet, optimizers import chainer.functions as F import chainer.links as L import os import cv2 import logging import datetime # 確率的勾配降下法で学習させる際の1回分のバッチサイズ batchsize = 100 # 学習の繰り返し回数 n_epoch = 100 # 中間層の数 n_units = 1000 IMGSIZE = 28 class TegakiNN: def __init__(self,epoch,patterns): self.epoch = epoch _path = 'result_{}'.format(patterns) print(_path) self.model = chainer.FunctionSet(l1=F.Linear(2352, n_units), l2=F.Linear(n_units, n_units), l3=F.Linear(n_units, 2)) chainer.serializers.load_npz('{}/model_tegaki_{}'.format( _path,self.epoch),self.model) self.optimizer = chainer.optimizers.Adam() self.optimizer.setup(self.model) chainer.serializers.load_npz('{}/optimizer_tegaki_{}'.format( _path,self.epoch),self.optimizer) def predict(self,image): x = image.astype(np.float32) x = cv2.resize(x,(IMGSIZE*3,IMGSIZE)) x = x.reshape(1,1,IMGSIZE*3,IMGSIZE)/255 h1 = F.relu(self.model.l1(chainer.Variable(x))) h2 = F.relu(self.model.l2(h1)) y = self.model.l3(h2) return np.argmax(y.data)