首页 > 解决方案 > model.output.op 在 keras 中做了什么?

问题描述

这是 grad-cam 代码的一部分:

def generate_grad_cam(img_tensor, model, class_index, activation_layer):
    inp = model.input
    y_c = model.output.op.inputs[0][0, class_index]
    A_k = model.get_layer(activation_layer).output

做什么model.output.op.inputs[0][0,class_index]?是什么model.output.op

在此处输入图像描述

在这张图中,model.output.op.inputs[0][0, class_index] 是哪一个??

标签: machine-learningkeraskeras-layer

解决方案


我在 TF/Keras 代码中做了一些探索,基于该调查,我相信

model.output.op

提供的是模型输出层的数学“运算”。输入提供该操作的输入张量列表(例如,在您的情况下,输入 [0] 是实际操作的第一个输入)。剩下的部分是切入该张量以提取某个元素。

为 VGG16 示例模型运行此代码后:

import tensorflow as tf

tf.keras.backend.clear_session()  # For easy reset of notebook state.

myNewModel = tf.keras.applications.VGG16()
print('myNewModel.output.op:')
print(myNewModel.output.op)
print('myNewModel.output.op.inputs[0]:')
print(myNewModel.output.op.inputs[0])
print('myNewModel.output.op.inputs[0][0,3]:')
print(myNewModel.output.op.inputs[0][0,3])

我得到了这个输出 - 请注意,我使用 3 作为 class_index 仅作为示例:

myNewModel.output.op:
name: "predictions/Softmax"
op: "Softmax"
input: "predictions/BiasAdd"
attr {
  key: "T"
  value {
    type: DT_FLOAT
  }
}

myNewModel.output.op.inputs[0]:
Tensor("predictions/BiasAdd:0", shape=(?, 1000), dtype=float32)
myNewModel.output.op.inputs[0][0,3]:
Tensor("strided_slice:0", shape=(), dtype=float32)

我希望这有帮助。


推荐阅读