def evaluate(dataset, model, args, n_query_data=None):
pool, modelL = make_pool(model, args.n_pool)
correct_per, sub_correct_per, n_choice_per = 0., 0., 0.
sum_loss_data = xp.zeros(())
idsL = model.make_efficient_chunk(list(six.moves.range(len(dataset))), dataset)
all_datasL = [[dataset[idx] for idx in ids] for ids in idsL]
# Split dataset into some part
n_ch = len(all_datasL[0])/6+1
for j in six.moves.range(6):
datasL = [each_datas[j*n_ch:(j+1)*n_ch] for each_datas in all_datasL]
for result in pool.imap_unordered(
wrapper_solve, zip(modelL, datasL, [False]*args.n_pool)):
sum_loss_one, n_T, n_choice, n_s = result
sum_loss_data += sum_loss_one
correct_per += n_T
sub_correct_per += n_s
n_choice_per += n_choice
if n_query_data is None:
n_query_data = sum([len(v_["queries"]) for v_ in dataset])
pool.close()
return cuda.to_cpu(sum_loss_data) / n_query_data, correct_per, n_choice_per, sub_correct_per
评论列表
文章目录