import chainer from chainer import cuda import chainer.functions as F import chainer.links as L from chainer import Variable, optimizers import numpy as np import os import logging import datetime log_name='predict_log.txt' logging.basicConfig(filename=log_name,level=logging.INFO) logging.info('***************') logging.info(datetime.datetime.today()) logging.info('Predict Log') # 中間層の数 n_units = 1000 # 使用するモデル・オプティマイザのepoch数 epoch = 17 mnist = chainer.datasets.get_mnist()[0] x_data = [] y_data = [] for data in mnist: x_data.append(data[0]) y_data.append(data[1]) x_data = np.array(x_data).astype(np.float32) y_data = np.array(y_data).astype(np.int32) N = len(x_data) N_test = 1000 print('N is {}'.format(N)) model = chainer.FunctionSet(l1=F.Linear(784, n_units), l2=F.Linear(n_units, n_units), l3=F.Linear(n_units, 10)) chainer.serializers.load_npz('model_tegaki_{}'.format(epoch),model) optimizer = chainer.optimizers.Adam() optimizer.setup(model) chainer.serializers.load_npz('optimizer_tegaki_{}'.format(epoch),optimizer) # 認識してみる print('Predict MNIST.') print('\tPredict\tLabel') correct = 0 for idx in np.random.permutation(N)[:N_test]: #x = Variable(x_data[idx].reshape(1,1,28,28)) x = Variable(x_data[idx]) h1 = F.dropout(F.relu(model.l1(x))) h2 = F.dropout(F.relu(model.l2(h1))) y = model.l3(h2) if(int(y_data[idx]) == np.argmax(y.data)): correct = correct + 1 else: print('Missed.',np.argmax(y.data),'\t',y_data[idx]) logging.debug('missed:{}!={}'.format(np.argmax(y.data),y_data[idx])) accuracy = correct / N_test print('accuracy:',accuracy,'({} / {})'.format(correct,N_test)) logging.info('accuracy: {}'.format(accuracy)) logging.info('***************')