Я пытаюсь реализовать карту активации классов для моей архитектуры 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)
? Если это так, что я должен сделать, чтобы не получить первую ошибку?
Заранее спасибо!