特遣部队.启用即时执行时,不支持梯度.使用tf.GradientTape代替 &


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

你有两个选项来解决这个错误:

  1. 。梯度在TF2中被撤销-按照这里的建议用GradientTape替换梯度https://github.com/tensorflow/tensorflow/issues/33135

  2. 使用tf1的compat模式禁用急切执行约束表单tf2

解决方案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]

相关内容

最新更新