为什么K.gradients对输入的损失梯度返回None

我想知道为什么在以下代码中我的梯度返回None:

import tensorflow.keras.losses as lossesloss = losses.squared_hinge(y_true, y_pred)from tensorflow.keras import backend as Kgrads = K.gradients(loss, CNN_model.input)[0]iterate = K.function([CNN_model.input], [loss, grads])

我的CNN_model.input是: <tf.Tensor 'conv2d_3_input:0' shape=(?, 28, 28, 1) dtype=float32>

我的损失是:<tf.Tensor 'Mean_3:0' shape=(1,) dtype=float64>

注意:在我的应用中,我将SVM的预测输出作为y_pred传递,如果这对您有帮助的话。


回答:

根据我之前的经验,Tensorflow需要使用GradientTape来记录某个变量的活动,从而计算其梯度。在您的情况下,应该是这样的:

x = np.random.rand(10) #您的输入变量x = tf.Variable(x) #为了让GradientTape评估输入,它应该是一个张量with tf.GradientTape() as tape:    tape.watch(x) #通过这个方法您可以观察您的变量    proba = model(x) #获取输入的预测    loss = your_loss_function(y_true, proba) #计算损失gradient = tape.gradient(loss, x) #计算梯度,这必须在记录之外进行

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注