def get_idp_acc(model, dataset_tuple, comp_ratio, profile = None, batchsize = 128, gpu = 0):
chainer.config.train = True
import numpy as np
#xp = np if gpu < 0 else cuda.cupy
x, indices, x_zf, HtH, Hty = dataset_tuple._datasets[0], dataset_tuple._datasets[1], dataset_tuple._datasets[2], dataset_tuple._datasets[3], dataset_tuple._datasets[4]
accs = 0
BERs = 0
model.train = False
for j in range(0, len(x), batchsize):
x_batch = np.array(x[j:j + batchsize])
indices_batch = np.array(indices[j:j + batchsize])
x_zf_batch = np.array(x_zf[j:j + batchsize])
HtH_batch = np.array(HtH[j:j + batchsize])
Hty_batch = np.array(Hty[j:j + batchsize])
if profile == None:
acc_data = model(x_batch, indices_batch, x_zf_batch, HtH_batch, Hty_batch, comp_ratio=comp_ratio,
ret_param = 'acc')
else:
acc_data = model(x_batch, indices_batch, x_zf_batch, HtH_batch, Hty_batch, comp_ratio=comp_ratio,
ret_param='acc', profile=profile)
acc_data.to_cpu()
acc = acc_data.data
BER = 1 - acc
accs += acc * len(x_batch)
BERs += BER * len(x_batch)
return (accs / len(x)) * 100.