def predict_picture(pic_path,model_path,dataset,device):
	if dataset == 'char74k':
		size = 20
		num_classes = 26
	else:
		size = 28
		num_classes = 10
	transform = transforms.Compose([
		transforms.Scale(size),
		transforms.CenterCrop((size,size)),
		transforms.ToTensor(),
		transforms.Normalize((0.1307,),(0.3081,))
	])

	img = Image.open(pic_path)
	img_tensor = transform(img)
	img_tensor = img_tensor.unsqueeze(0)
	img_tensor = img_tensor.to(device)

	model = CapsNet(num_classes=num_classes,conv_in=3)
	model = model.to(device)
	model.eval()
	state_dict = torch.load(model_path)
	model.load_state_dict(state_dict)

	score = model(img_tensor)
	probs = nn.functional.softmax(score,dim=-1)
	max_value,index = torch.max(probs,dim=-1)
	print('The picture {} is:{}'.format(pic_path.split('/')[-1],char74k_id2labels[int(index)]))
def eval(model_path, result_path, dataProcessor, num_classes, epoch, device,
         eval_type, logger):
    capsNet = CapsNet(num_classes=num_classes, conv_in=3)
    state_dict = torch.load(model_path + '/model_state_dict.pkl')
    capsNet.load_state_dict(state_dict)
    capsNet.to(device)
    valid_scores, valid_predicts, valid_labels = predict(
        capsNet, dataProcessor, num_classes, epoch, device, 'valid', logger)
    test_scores, test_predicts, test_labels = predict(capsNet, dataProcessor,
                                                      num_classes, epoch,
                                                      device, 'test', logger)
    store_results(test_predicts, test_labels, result_path)
    with open(result_path + '/result.csv', 'w') as file:
        file.write('valid scores,test scores\n')
        file.write(str(valid_scores) + ',' + str(test_scores))

    return valid_scores, test_scores