Я сталкиваюсь с ошибками при применении следующего кода. цель состоит в том, чтобы создать состязательное изображение с использованием метода быстрого градиентного знака для модели глубокого обучения InceptionV3 (). Я выполнил формальные шаги.
Я использовал tf.keras.applications.InceptionV3 () модели не keras.models.load_model
Я обернул модель
Инициализированный метод FastGradientMetho с правильными параметрами
сгенерировать метод выдает ошибку перед завершением кода для запуска сеанса
Примечание: я использую Tensorflow 1.15.2 и Cleverhans 3.0.1
import numpy as np
from PIL import Image
import imageio
import tensorflow as tf
from cleverhans.attacks import FastGradientMethod
from cleverhans.utils_keras import KerasModelWrapper
sess = tf.keras.backend.get_session()
model1= tf.keras.applications.InceptionV3()
model_wrap = KerasModelWrapper(model1)
epsilon=[0,0.01,0.015,0.02,0.1]
tf.logging.set_verbosity(tf.logging.INFO)
x = tf.placeholder(tf.float32, shape=(1, 299, 299, 3))
eps=tf.placeholder(tf.float32,shape=())
fgsm = FastGradientMethod(model_wrap, sess=sess)
fgsm_params = {'eps': eps, 'clip_min': -1.0, 'clip_max': 1.0}
x_adv = fgsm.generate(x, **fgsm_params)
Когда я его запускаю, у меня появляется следующий журнал ошибок.
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-8-957b4da8c65a> in <module>()
21 fgsm = FastGradientMethod(model_wrap, sess=sess)
22 fgsm_params = {'eps': eps, 'clip_min': -1.0, 'clip_max': 1.0}
---> 23 x_adv = fgsm.generate(x, **fgsm_params)
/usr/local/lib/python3.6/dist-packages/cleverhans/attacks/__init__.py in generate(self, x, **kwargs)
340 assert self.parse_params(**kwargs)
341
--> 342 labels, _nb_classes = self.get_or_guess_labels(x, kwargs)
343
344 return fgm(
/usr/local/lib/python3.6/dist-packages/cleverhans/attacks/__init__.py in get_or_guess_labels(self, x, kwargs)
279 labels = kwargs['y_target']
280 else:
--> 281 preds = self.model.get_probs(x)
282 preds_max = reduce_max(preds, 1, keepdims=True)
283 original_predictions = tf.to_float(tf.equal(preds, preds_max))
/usr/local/lib/python3.6/dist-packages/cleverhans/utils_keras.py in get_probs(self, x)
177 name = self._get_softmax_name()
178
--> 179 return self.get_layer(x, name)
180
181 def get_layer_names(self):
/usr/local/lib/python3.6/dist-packages/cleverhans/utils_keras.py in get_layer(self, x, layer)
225 """
226 # Return the symbolic representation for this layer.
--> 227 output = self.fprop(x)
228 try:
229 requested = output[layer]
/usr/local/lib/python3.6/dist-packages/cleverhans/utils_keras.py in fprop(self, x)
201 # Make a new model that returns each of the layers as output
202 out_layers = [x_layer.output for x_layer in self.model.layers]
--> 203 self.keras_model = KerasModel(new_input, out_layers)
204
205 # and get the outputs for that model on the input x
/usr/local/lib/python3.6/dist-packages/keras/legacy/interfaces.py in wrapper(*args, **kwargs)
89 warnings.warn('Update your `' + object_name + '` call to the ' +
90 'Keras 2 API: ' + signature, stacklevel=2)
---> 91 return func(*args, **kwargs)
92 wrapper._original_function = func
93 return wrapper
/usr/local/lib/python3.6/dist-packages/keras/engine/network.py in __init__(self, *args, **kwargs)
92 'inputs' in kwargs and 'outputs' in kwargs):
93 # Graph network
---> 94 self._init_graph_network(*args, **kwargs)
95 else:
96 # Subclassed network
/usr/local/lib/python3.6/dist-packages/keras/engine/network.py in _init_graph_network(self, inputs, outputs, name, **kwargs)
235 # Keep track of the network's nodes and layers.
236 nodes, nodes_by_depth, layers, layers_by_depth = _map_graph_network(
--> 237 self.inputs, self.outputs)
238 self._network_nodes = nodes
239 self._nodes_by_depth = nodes_by_depth
/usr/local/lib/python3.6/dist-packages/keras/engine/network.py in _map_graph_network(inputs, outputs)
1419 layer=layer,
1420 node_index=node_index,
-> 1421 tensor_index=tensor_index)
1422
1423 for node in reversed(nodes_in_decreasing_depth):
/usr/local/lib/python3.6/dist-packages/keras/engine/network.py in build_map(tensor, finished_nodes, nodes_in_progress, layer, node_index, tensor_index)
1400
1401 # Propagate to all previous tensors connected to this node.
-> 1402 for i in range(len(node.inbound_layers)):
1403 x = node.input_tensors[i]
1404 layer = node.inbound_layers[i]
TypeError: object of type 'InputLayer' has no len()