def eval_func(self, label): # chainer.functionのtype_checkを通過させるため、[]のwrapperをつける xp = cuda.get_array_module(self.pool.variable.data) mean_activations = Variable(xp.array( [xp.mean(self.pool.variable.data, axis=0)], dtype=xp.float32)) label = Variable(xp.array(label, dtype=xp.int32)) # cpuに移す mean_activations.to_cpu() label.to_cpu() mean_activations = mean_activations.data label = label.data # top1, top5の算出 res_top1 = mean_activations.argmax() res_top5 = mean_activations.argsort()[0][-5:] top1 = 1.0 if label[0] == res_top1 else 0.0 top5 = 1.0 if label[0] in res_top5 else 0.0 report({'top1': top1, 'top5': top5})
def eval_func(self, label): # chainer.functionのtype_checkを通過させるため、[]のwrapperをつける xp = cuda.get_array_module(self.pool.variable.data) mean_activations = Variable(xp.array( [xp.mean(self.pool.variable.data, axis=0)], dtype=xp.float32)) label = Variable(xp.array(label, dtype=xp.int32)) # cpuに移す mean_activations.to_cpu() label.to_cpu() mean_activations = mean_activations.data label = label.data # top1, top5の算出 res_top1 = mean_activations.argmax() res_top5 = mean_activations.argsort()[0][-5:] # ndarray(numpy) -> list(pure python) label.tolist() res_top1 = int(res_top1) res_top5.tolist() # label[0] は imageに対応する元々のlabel # label はcommon_root_labels ref_top1 = 1.0 if res_top1 in label else 0.0 ref_top5 = 1.0 if set(res_top5) & set(label) else 0.0 org_top1 = 1.0 if label[0] == res_top1 else 0.0 org_top5 = 1.0 if label[0] in res_top5 else 0.0 report({ 'ref/top1': ref_top1, 'ref/top5': ref_top5, 'org/top1': org_top1, 'org/top5': org_top5 })