Получение `input` должно быть списком или кортежем при использовании K.function - PullRequest
0 голосов
/ 31 октября 2019

Я пытаюсь реализовать карту активации классов для моей архитектуры resnet50, следуя этому сообщению: https://vincentblog.xyz/posts/class-activation-maps

Мне пришлось заменить эту строку кода:

get_output = tf.keras.backend.function([model.layers[0].input], 
                                       [final_conv_layer.output, model.layers[-1].output])

этим:

  ins = model.layers[0].get_input_at(-1)
  outs = final_conv_layer.get_output_at(-1), model.layers[-1].get_output_at(-1)
  print("is instance", isinstance([ins], (list, tuple)))
  get_output = K.function(inputs=[ins], outputs=outs)

Поскольку я получил эту ошибку, как со входом, так и с выходами:

В слое resnet50 есть несколько входящих узлов, поэтому понятие «вход слоя» неверно-определенный. Вместо этого используйте get_input_at(node_index).

Но теперь, когда я использую функцию get_output, я получаю следующую ошибку:

   2894     def _call(self, inputs):
   2895         if not isinstance(inputs, (list, tuple)):
-> 2896             raise TypeError('`inputs` should be a list or tuple.')
   2897 
   2898         session = get_session()

TypeError: `inputs` should be a list or tuple.

Даже если print(isinstance([ins], (list, tuple))) выводит True

Почему я получаю эту ошибку? Это потому, что мне пришлось заменить input на get_input_at(-1)? Если это так, что я должен сделать, чтобы не получить первую ошибку?

Заранее спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...