tf.GradientTape()返回None

时间:2018-08-23 20:47:50

标签: python tensorflow

我正在尝试使用tf.GradientTape计算梯度。 当我尝试使用loss和Model.variables(tf.keras.Model)作为输入来执行此操作时,结果将返回None数组。 我究竟做错了什么? 我使用的tensorflow版本是1.9。

Model = CubeValModel(TrainingCurves)

LearningRate = 0.0005
TrainOpe = tf.train.AdamOptimizer(LearningRate, name="MainTrainingOpe")

for i in range (5):
    with tf.GradientTape() as t:
        Predictions = tf.nn.softmax(Model.FinalFC, name="SoftmaxPredictions")
        Cross_entropy = tf.nn.softmax_cross_entropy_with_logits(logits=Predictions, labels=TrainingLabels, name="CrossEntropy")
        Loss = tf.reduce_mean(Cross_entropy, name="Loss")
        print (Loss)
        print (Model.variables)
        Gradients = t.gradient(Loss, Model.variables)
        print(Gradients)

输出:

tf.Tensor(0.84878147, shape=(), dtype=float32)

[<tf.Variable 'LayerBlock1/Weights1:0' shape=(1, 3, 1, 3) dtype=float32, numpy=

[None, None, None, None, None, None, None, None, None]

1 个答案:

答案 0 :(得分:1)

我假设您正在使用TensorFlow急切执行,不是吗? 如果我没记错的话,在tf.GradientTape()下,您应该调用用于计算模型的方法,而不是调用其成员之一。该计算执行将允许t找出其以后需要生成的梯度。 希望对您有帮助