Код: Выделить всё
# Example of encoder flow in call()
x1 = self.EncoderModule_1(inputs) # 32 channels
x1p = self.pool1(x1)
x2 = self.EncoderModule_2(x1p) # 64 channels
x2p = self.pool2(x2)
x3 = self.EncoderModule_3(x2p) # 128 channels
...
x5 = self.EncoderModule_5(x4) # 512 channels
Модель возвращает словарь:
Код: Выделить всё
# Output of decoder 1
bone_mask = self.conv_1(x_decoder_4)
bone_mask = self.sigmoid_1(bone_mask)
# Output of decoder 2
lesion_mask = self.conv_2(x_decoder_8)
lesion_mask = self.sigmoid_2(lesion_mask)
return {'bone_mask': bone_mask, 'lesion_mask': lesion_mask}
Код: Выделить всё
Encoder_Module_5Я попробовал несколько подходов для извлечения последнего слоя кодера и создания отдельной модели кодера для Grad-CAM, но постоянно сталкивался с такими ошибками, как:
Код: Выделить всё
ValueError: Input 0 of layer "conv2d_105" is incompatible with the layer:
expected axis 1 of input shape to have value 32, but received input with shape (1, 3, 256, 256)
Код: Выделить всё
ValueError: Attempt to convert a value (None) with an unsupported type () to a Tensor.
Я попробовал следующее:
- Построение модели последовательного кодировщика:
Код: Выделить всё
encoder_input = tf.keras.Input(shape=(3,256,256))
x = model.EncoderModule_1(encoder_input)
x = model.pool1(x)
x = model.EncoderModule_2(x)
...
encoder_model = tf.keras.Model(inputs=encoder_input, outputs=x)
- Использование средства извлечения объектов для упаковки слоев модели:
Код: Выделить всё
class FeatureExtractor(tf.keras.Model):
def call(self, x):
y = x
for layer in model.layers:
y = layer(y)
if layer.name == "Encoder_Module_5":
encoder_out = y
outputs = model(x)
return {"encoder": encoder_out, **outputs}
Примечание. Входные данные имеют форму (3,256,256) (изображение RGB).
Как я могу правильно вычислить Grad-CAM на модели подкласса с пользовательскими слоями, захватив выходные данные промежуточного кодировщика и пропустив соединения, не нарушая прямой проход?
Я хочу сохранить структуру подкласса и не переписывать модель как чистую Последовательная или функциональная модель.
Заранее спасибо.
Подробнее здесь: https://stackoverflow.com/questions/798 ... stom-layer
Мобильная версия