def main(): if os.path.exists(directory): shutil.rmtree(directory) if not os.path.exists(directory): os.makedirs(directory) # device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") cnn = CNN() # cnn.to(device) cnn.eval() cnn.load_state_dict(torch.load('model.pkl')) print("Model Loaded") criterion = nn.MultiLabelSoftMarginLoss() data_loader = setting.get_test_data_loader() correct = 0 total = 0 count = 1 for i, (images, labels) in enumerate(data_loader): image = images variable = Variable(image) # variable = Variable(image).to(device) variable.requires_grad = True predict_label = cnn(variable) # predict_label = cnn(variable).to(device) loss = criterion(predict_label, labels.float()) cnn.zero_grad() loss.backward() data_grad = variable.grad.data perturbed_image = fgsm_attack(variable, epsilon, data_grad) predict_label = cnn(perturbed_image) numpy_image = perturbed_image.squeeze().detach().cpu().numpy() plt.imshow(numpy_image) fig = plt.gcf() fig.savefig(directory + '/' + str(count) + '.png') count += 1 c0 = setting.character_set[np.argmax(predict_label[0, 0:setting.character_set_length].data.numpy())] c1 = setting.character_set[np.argmax(predict_label[0, setting.character_set_length:2 * setting.character_set_length].data.numpy())] c2 = setting.character_set[np.argmax(predict_label[0, 2 * setting.character_set_length:3 * setting.character_set_length].data.numpy())] c3 = setting.character_set[np.argmax(predict_label[0, 3 * setting.character_set_length:4 * setting.character_set_length].data.numpy())] predict_label = '%s%s%s%s' % (c0, c1, c2, c3) true_label = setting.decode(labels.numpy()[0]) total += labels.size(0) if predict_label == true_label: correct += 1 if total % 20 == 0: print('Test Accuracy of the model on the %d test images: %f %%' % (total, 100 * correct / total)) print('Test Accuracy of the model on the %d test images: %f %%' % (total, 100 * correct / total))
def main(): cnn = CNN() cnn.eval() cnn.load_state_dict(torch.load('model1.pkl')) print("load cnn net.") test_dataloader = my_dataset.get_test_data_loader() correct = 0 total = 0 epsilon = float(input("please input epsilon = ")) criterion = nn.MultiLabelSoftMarginLoss() for i, (images, labels) in enumerate(test_dataloader): vimage = Variable(images) labels = Variable(labels.float()) vimage.requires_grad = True predict_labels = cnn(vimage) loss = criterion(predict_labels, labels) cnn.zero_grad() loss.backward() data_grad = vimage.grad.data perturbed_data = fgsm_attack(vimage, epsilon, data_grad) perturbed_label = cnn(perturbed_data) c0 = captcha_setting.ALL_CHAR_SET[np.argmax( perturbed_label[0, 0:captcha_setting.ALL_CHAR_SET_LEN].data.numpy())] c1 = captcha_setting.ALL_CHAR_SET[np.argmax( perturbed_label[0, captcha_setting.ALL_CHAR_SET_LEN:2 * captcha_setting.ALL_CHAR_SET_LEN].data.numpy())] c2 = captcha_setting.ALL_CHAR_SET[np.argmax( perturbed_label[0, 2 * captcha_setting.ALL_CHAR_SET_LEN:3 * captcha_setting.ALL_CHAR_SET_LEN].data.numpy())] c3 = captcha_setting.ALL_CHAR_SET[np.argmax( perturbed_label[0, 3 * captcha_setting.ALL_CHAR_SET_LEN:4 * captcha_setting.ALL_CHAR_SET_LEN].data.numpy())] perturbed_label = '%s%s%s%s' % (c0, c1, c2, c3) true_label = one_hot_encoding.decode(labels.numpy()[0]) total += labels.size(0) if (perturbed_label == true_label): correct += 1 if (total % 100 == 0): print('Test Accuracy of the model on the %d test images: %f %%' % (total, 100 * correct / total)) print('Test Accuracy of the model on the %d test images: %f %%' % (total, 100 * correct / total))