Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.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
在tensorflow 2.0中的自定义丢失和渐变代码中获得全无渐变_Tensorflow_Customization_Loss Function - Fatal编程技术网

在tensorflow 2.0中的自定义丢失和渐变代码中获得全无渐变

在tensorflow 2.0中的自定义丢失和渐变代码中获得全无渐变,tensorflow,customization,loss-function,Tensorflow,Customization,Loss Function,我正试图在tensorflow 2.0中编写一个非常糟糕的基本损失函数。总之,我有5门课,我想不分组训练,只使用一个热编码。我想让我的模型用5个类中的每个类的值来预测每个输入。之后,我想尝试获得两个最高值,如果它们是3或4,我想将其归类为“好”,如果不是,则归类为“坏”。最后,我希望我的损失为1-精度,如我所说的精度在以下情况下具有真正的正性: 1.模型猜测3,实际类为3 2.模型猜测3,实际类为4 3.模型猜测4,实际类为3 4.模型猜测为4,实际类为4 同样,我知道我可以更改数据的标签,但我

我正试图在tensorflow 2.0中编写一个非常糟糕的基本损失函数。总之,我有5门课,我想不分组训练,只使用一个热编码。我想让我的模型用5个类中的每个类的值来预测每个输入。之后,我想尝试获得两个最高值,如果它们是3或4,我想将其归类为“好”,如果不是,则归类为“坏”。最后,我希望我的损失为1-精度,如我所说的精度在以下情况下具有真正的正性: 1.模型猜测3,实际类为3 2.模型猜测3,实际类为4 3.模型猜测4,实际类为3 4.模型猜测为4,实际类为4

同样,我知道我可以更改数据的标签,但我宁愿不这样做。 我使用了一些已经写好的指标来记录我的损失,如下所示:

#@tf.function
def my_损耗(输出,实数,threeandfour=1,权重=损耗,mod=m):
m=tf.keras.metrics.TruePositives(阈值=0.5)
m、 更新状态(实际、输出、样本重量=重量)
shape_0=tf.shape(输出)[0]
#形状1=tf.constant(2,dtype=tf.int32)
形状_1=2
halfs=tf.math.multiply(tf.constant(0.5,dtype=tf.float32),tf.one((shape_0,shape_1,dtype=tf.float32))
thrsfrs_1=输出[:,2:4]
thrsfrs=tf.cast(thrsfrs_1,dtype=tf.float32)
logs_1=tf.math.greater(thrsfrs,halfs)
logs=tf.cast(logs_1,dtype=tf.float32)
打印('原木形状:',np.形状(原木))
打印('少数日志:',日志,)
_模型中的_3_4s_的数量=tf.减少_总和(日志)
prec_1=tf.math.divide(m.result(),模型中_3_4s_的数量)
prec=tf.cast(prec_1,dtype=tf.float32)
返回tf.math.subtract(tf.constant(1,dtype=tf.float32),prec)
梯度函数:

使用tf.GradientTape()作为磁带:
磁带.手表(模型.可训练的变量)
y=型号(X列车)
打印(y:,y)
损耗值=我的损耗(y、tf、one、mod=m、重量=损耗重量)
#损耗值=tf.cast(损耗值,数据类型=tf.float32)
打印('损耗值:',损耗值)
梯度=磁带梯度(损失值、模型、可训练变量)
优化器。应用_梯度(zip(梯度、模型、可训练的_变量))
它确实成功地得到了一个损耗值,它是tensorflow,看起来还不错。这是我得到的梯度和误差:

python
got grads
[None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None]

ValueError                                Traceback (most recent call last)
<ipython-input-370-2f8f4b783a7b> in <module>()
     23 
     24 #optimizer.apply_gradients(zip(grads, model.trainable_variables), global_step)
---> 25 optimizer.apply_gradients(zip(grads, model.trainable_variables))
     26 
     27 #print("Step: {},         Loss: {}".format(global_step.numpy(),

1 frames
/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/optimizer_v2/optimizer_v2.py in _filter_grads(grads_and_vars)
    973   if not filtered:
    974     raise ValueError("No gradients provided for any variable: %s." %
--> 975                      ([v.name for _, v in grads_and_vars],))
    976   if vars_with_empty_grads:
    977     logging.warning(

ValueError: No gradients provided for any variable: ['dense_40/kernel:0', 'dense_40/bias:0', 'dense_41/kernel:0', 'dense_41/bias:0', 'dense_42/kernel:0', 'dense_42/bias:0', 'dense_43/kernel:0', 'dense_43/bias:0', 'dense_44/kernel:0', 'dense_44/bias:0', 'dense_45/kernel:0', 'dense_45/bias:0', 'dense_46/kernel:0', 'dense_46/bias:0', 'dense_47/kernel:0', 'dense_47/bias:0']


我在
tensorflow==2.0.0a0
中遇到了同样的问题

更新到
2.0.0b1
解决了我的问题

pip install -U tensorflow==2.0.0b1

我在
tensorflow==2.0.0a0
中遇到了同样的问题

更新到
2.0.0b1
解决了我的问题

pip install -U tensorflow==2.0.0b1

谢谢你的回答@alexey。不幸的是,我已经在使用tensorflow 2.0.0 beta-1,当我按照您编写的方式重新安装它时,它仍然没有给我任何渐变。我再次查看并注意到问题的另一个潜在根源。根据TF文档,尝试将
grads=tape.gradient(损失值,模型.可训练变量)
放入
块中
根据TF文档
grads=tape.gradient(损失值,模型.可训练变量)
放入de块外。我在想到底发生了什么谢谢你的帮助!!面对同样的问题,解决办法是什么?谢谢你的回答@alexey。不幸的是,我已经在使用tensorflow 2.0.0 beta-1,当我按照您编写的方式重新安装它时,它仍然没有给我任何渐变。我再次查看并注意到问题的另一个潜在根源。根据TF文档,尝试将
grads=tape.gradient(损失值,模型.可训练变量)
放入
块中
根据TF文档
grads=tape.gradient(损失值,模型.可训练变量)
放入de块外。我在想到底发生了什么谢谢你的帮助!!面对同样的问题,解决办法是什么??