#python #artificial-intelligence
#python #искусственный интеллект
Вопрос:
для этого кода мне необходимо реализовать атаку FGSM против всех примеров и рассчитать вероятность успеха. Кроме того, отобразите исходное изображение с атакованным изображением, а также прогнозируемый класс для каждого изображения. Однако в моем ноутбуке отображаются одни и те же изображения собак — что-то не так в моем текущем коде?
def try_fool(img_path, epsilon):
# Lets's import an image to process. -- copied from above^^
#image_path = tf.keras.utils.get_file('YellowLabradorLooking_new.jpg', 'https://storage.googleapis.com/download.tensorflow.org/example_images/YellowLabradorLooking_new.jpg')
image_raw = tf.io.read_file(image_path)
image = tf.image.decode_png(image_raw)
input_image = preprocess(image)
reversed_image = reverse_preprocess(input_image)
preprocessed_img, _ = sess.run([input_image, reversed_image])
img_probs = sess.run(pretrained_model, {input_image_placeholder: preprocessed_img})
top_1 = list(get_imagenet_label(img_probs))[0]
# preturbation ^^ copied from above
perturbations = create_adversarial_pattern(input_image_placeholder, tf.argmax(pretrained_model,1))
adv_x = input_image_placeholder epsilon*perturbations[0]
adv_x = tf.clip_by_value(adv_x, -1, 1)
rev_image_atcked = reverse_preprocess(adv_x)
_, raw_img_atcked = sess.run([image, rev_image_atcked], {input_image_placeholder: preprocessed_img})
# new image..
img_probs_attacked = sess.run(pretrained_model, {input_image_placeholder: raw_img_atcked})
top_1_attacked = list(get_imagenet_label(img_probs_attacked))[0]
_, raw_adv_img = sess.run([image, reversed_image], {input_image_placeholder: preprocessed_img})
fig = plt.figure(figsize=(9, 3))
fig.add_subplot(1, 2, 1)
#original image
plt.imshow(raw_adv_img[0])
plt.gca().axis('off')
plt.title(top_1)
fig.add_subplot(1, 2, 2)
plt.imshow(raw_img_atcked[0])
plt.gca().axis('off')
plt.title(top_1_attacked)
plt.tight_layout()
plt.show()
return top_1[1] != top_1_attacked[1]
Ответ №1:
Одна вещь, с которой следует быть осторожным при работе с записными книжками Jupyter, заключается в том, что после запуска ячейки, в которой объявляется переменная в глобальной области видимости, эта переменная будет сохраняться как объявленная до тех пор, пока вы не объявите переменную повторно, не удалите переменную вручную (не является обычной или необходимой) или не перезапустите ядро Jupyter notebook.
Я предполагаю, что вы запустили его один раз со следующим не прокомментированным:
#image_path = tf.keras.utils.get_file('YellowLabradorLooking_new.jpg', 'https://storage.googleapis.com/download.tensorflow.org/example_images/YellowLabradorLooking_new.jpg')
Обратите внимание, как ваш другой код все еще использует image_path
(например, image_raw = tf.io.read_file(image_path)
)
Похоже, вы хотите сначала правильно сделать отступ в своем коде, чтобы он находился внутри определения вашей функции try_fool
, а затем изменить image_path
на img_path
. В противном случае каждый раз, когда вы запускаете свой ноутбук, вы будете использовать два изображения, определенные в image_path
.