Tensorflow 计算三重态损失作为可微激活以生成梯度权重?

Tensorflow 计算三重态损失作为可微激活以生成梯度权重?,tensorflow,deep-learning,visualization,cnn,Tensorflow,Deep Learning,Visualization,Cnn,我正在研究使用三重态损耗模型中的Grad Cam作为基础模型来可视化嵌入网络的问题。我在计算时得到了无值,与特征图相关的梯度 我有下面的GradCam代码在CNN中运行良好,但不知道如何在三重态损耗模型中实现。起点是计算三重态损耗的梯度权重 格雷德卡姆: 麦可德 # Getting output w.r.t class y_c = model.output[0, cls] # Fetching last convolution layer conv_output = model.get_lay

我正在研究使用三重态损耗模型中的Grad Cam作为基础模型来可视化嵌入网络的问题。我在计算时得到了值,与特征图相关的梯度

我有下面的GradCam代码在CNN中运行良好,但不知道如何在三重态损耗模型中实现。起点是计算三重态损耗的梯度权重

格雷德卡姆: 麦可德
# Getting output w.r.t class 
y_c = model.output[0, cls]
# Fetching last convolution layer
conv_output = model.get_layer(layer_name).output
# Compute class gradients w.r.t. last conv layer
grads = tf.gradients(y_c, conv_output)[0]

#grads = normalize(grads)

# Instantiates a Keras function which run the computation graph
gradient_function = K.backend.function([model.input], [conv_output, grads])

# Getting output and gradients of the respective image  
output, grads_val = gradient_function([image])
output, grads_val = output[0, :], grads_val[0, :, :, :]

weights = np.mean(grads_val, axis=(0, 1))

# Multiply output with weights to get CAM
cam = np.dot(output, weights)

# Passing through ReLU
cam = np.maximum(cam, 0)          # Element-wise maximum of array elements.
#cam = zoom(cam, H/cam.shape[0])  # Zoom an array
cam = cam / np.max(cam)           # Scale 0 to 1.0
cam = resize(cam, (H, W))     
# generating class specific triplet
img = loss_data_generator(clsname=0, indexing=10)
# maximum indices for predictions 
# pred = triplet_model.predict_generator(img, steps=150)
# compute loss
Loss_tri = triplet_model.evaluate_generator(img, steps=150)
# fetch last conv layer
embed_model = triplet_model.layers[3]
final_conv_layer = embed_model.layers[-3].output
# compute grads
grads = tf.gradients(Loss_tri, final_conv_layer)[0]