我正在尝试使用Tensorflow的新的急切执行模式来遵循http://www.hackevolve.com/where-cnn-is-looking-grad-cam/上的指南。特别是有一句话让我感到难过:
grads = K.gradients(class_output, last_conv_layer.output)[0]
Run Code Online (Sandbox Code Playgroud)
我了解它正在查找最后一个卷积层与特定类的输出之间的梯度。但是,我无法弄清楚如何使用来完成此操作GradientTape
,因为(a)都是张量而不是变量,并且(b)一个不是直接从另一个张量派生的(它们的特征图已经存在,因此没有图,它们实际上是独立的) )。
编辑:更多信息。尚未有任何参与者回答,因此,我将继续添加自发布问题以来我已尝试的内容:
显而易见的步骤是通过Eager执行来重现第一部分。
import numpy as np
import cv2
import tensorflow as tf
tf.enable_eager_execution()
model = tf.keras.models.load_model("model.h5")
print(type(model))
# tensorflow.python.keras.engine.sequential.Sequential
from dataset import prepare_dataset
_, ds, _, _, _, _ = prepare_dataset() # ds is a tf.data.Dataset
print(type(ds))
# tensorflow.python.data.ops.dataset_ops.DatasetV1Adapter
it = train_ds.make_one_shot_iterator()
img, label = it.get_next()
print(type(img), img.shape)
# <class 'tensorflow.python.framework.ops.EagerTensor'> (192, 192, 3)
print(type(label), label.shape)
# <class 'tensorflow.python.framework.ops.EagerTensor'> (2,)
img = np.expand_dims(img, axis=0)
print(img.shape)
# (1, 192, 192, …
Run Code Online (Sandbox Code Playgroud) 最近,我们的老师给了我们关于JavaScript的测验.我在编程方面比较先进,所以当我遇到一个问题时:
在同一个函数中使用函数的名称会导致无限循环?
因为递归,我回答错误.根据我的理解,你必须使用函数的名称来调用它,所以递归会使这并不总是正确的.
我的理解是正确的,还是措辞不同?