コード例 #1
0
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))
コード例 #2
0
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))