Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Tensorflow损失函数当提供标量时无梯度误差_Python_Tensorflow_Neural Network - Fatal编程技术网

Python Tensorflow损失函数当提供标量时无梯度误差

Python Tensorflow损失函数当提供标量时无梯度误差,python,tensorflow,neural-network,Python,Tensorflow,Neural Network,这个问题是关于tf.loss.huber_loss()函数的,以及如何将它应用于标量而不是向量。谢谢你抽出时间 我的模型类似于MNIST这样的分类问题。我的代码基于TensorFlow层教程,并在我认为合适的地方进行了更改。我不认为我的问题需要确切的代码 我的标签采用{0,…,8}中的整数值,并将其转换为onehot标签,如下所示: onehot_labels = tf.one_hot(indices=tf.cast(labels, tf.int32), depth=n_classes) p

这个问题是关于tf.loss.huber_loss()函数的,以及如何将它应用于标量而不是向量。谢谢你抽出时间

我的模型类似于MNIST这样的分类问题。我的代码基于TensorFlow层教程,并在我认为合适的地方进行了更改。我不认为我的问题需要确切的代码

我的标签采用{0,…,8}中的整数值,并将其转换为onehot标签,如下所示:

onehot_labels = tf.one_hot(indices=tf.cast(labels, tf.int32), depth=n_classes)
 predictions = {"classes": tf.argmax(input=logits, axis=1), "probabilities": tf.nn.softmax(logits, name="softmax_tensor")}
模型中的最后一层是

logits = tf.layers.dense(inputs=dense4, units=n_classes)
将其转换为如下预测:

onehot_labels = tf.one_hot(indices=tf.cast(labels, tf.int32), depth=n_classes)
 predictions = {"classes": tf.argmax(input=logits, axis=1), "probabilities": tf.nn.softmax(logits, name="softmax_tensor")}
在教程中,我从tf.loss.softmax\u cross\u entropy()损失函数开始。但在我的模型中,我预测的是离散化后的bin a值将在哪个位置下降。所以我开始寻找一个损失函数,它可以解释一个料仓关闭的预测比两个料仓关闭的预测问题要小。类似于绝对差值或休伯函数

代码

onehot_labels = tf.one_hot(indices=tf.cast(labels, tf.int32), depth=n_classes)
loss = tf.losses.softmax_cross_entropy(onehot_labels=onehot_labels, logits=logits)
与优化器结合使用:

optimizer = tf.train.GradientDescentOptimizer(learning_rate=ps.learning_rate)
工作没有任何错误。更改为Huber功能时:

loss = tf.losses.huber_loss(labels=onehot_labels, predictions=logits)
仍然没有错误。但在这一点上,我不确定到底发生了什么。基于这一点,我希望对向量的元素成对应用Huber函数,然后求和或平均

我只想对标签整数(在{0,…,9})和预测值应用Huber函数:

preds = tf.argmax(input=logits, axis=1)
这就是我所尝试的:

loss = tf.losses.huber_loss(labels=indices, predictions=preds)
这增加了错误

ValueError: No gradients provided for any variable
我发现了两个我认为在我的情况下不会发生的常见原因:

  • 变量对象和损失函数之间没有路径。但是由于我的预测代码经常被使用,并且标签是作为整数提供的,我认为这不适用于这里

  • 该函数不能导出为梯度。但当向量被用作输入时,Huber函数确实起作用,所以我认为情况并非如此

我的问题是:什么代码允许我在两个整数张量(标签和预测)上使用Huber损失函数