from tensorflow.keras.applications import VGG16
from tensorflow.keras import backend as K
model = VGG16(weights='imagenet',
include_top=False)
layer_name = 'block3_conv1'
filter_index = 0
layer_output = model.get_layer(layer_name).output
loss = K.mean(layer_output[:, :, :, filter_index])
grads = K.gradients(loss, model.input)[0]
我无法执行grads = K.gradients(loss, model.input)[0]
,它会产生一个错误:tf.gradients is not supported when eager execution is enabled. Use tf.GradientTape instead
您也有两个选项可以解决此错误:
-
.gradients 在 TF2 中被删除 - 按照此处的建议用 GradientTape 替换渐变https://github.com/tensorflow/tensorflow/issues/33135
-
只需禁用 tf2 的急切执行约束形式和 tf1 的兼容模式
解决方案 2 的运行代码示例:
from tensorflow.keras.applications import VGG16
from tensorflow.keras import backend as K
import tensorflow as tf
tf.compat.v1.disable_eager_execution()
model = VGG16(weights='imagenet',
include_top=False)
layer_name = 'block3_conv1'
filter_index = 0
layer_output = model.get_layer(layer_name).output
loss = K.mean(layer_output[:, :, :, filter_index])
grads = K.gradients(loss, model.input)[0]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)