Атака FGSM / градиент Кераса, когда классификационной моделью является SVM - PullRequest
1 голос
/ 03 марта 2020

Я работаю над атакой FGSM для классификатора Fa cenet, который использует модель Keras для встраивания и SVM, чтобы придумать классификацию. Мне трудно определить, как отформатировать входящие данные, так как мне нужно сначала передать вход в SVM, прежде чем я смогу принять потери, но затем я получаю градиент как None, который завершается ошибкой. Есть ли у вас какие-либо идеи о том, как я мог бы эффективно передать значения?

for i in range(epochs): 
    print(i)
    # One hot encode the target class
    target = K.one_hot(target_class, 5)

    # Get the new image and predictions
    embeddingPred=asarray(embed_model.output[0])
    prediction= tf.reshape(model.predict_proba(embeddingPred),[5,])
    prediction = tf.cast(tf.convert_to_tensor(prediction), tf.float32)

    # Get the loss and gradient of the loss wrt the inputs
    loss = -1*K.categorical_crossentropy(target, prediction)
    grads = K.gradients(loss, embed_model.input)

    # Get the sign of the gradient
    delta = K.sign(grads[0])
    x_noise = x_noise + delta

    # Perturb the image
    x_adv = x_adv + epsilon*delta

    # Get the new image and predictions
    x_adv = sess.run(x_adv, feed_dict={embed_model.input:x})
...