使用循环在tensorflow中创建自定义损失函数
我想使用y_true和y_pred为tensorflow模型创建一个自定义损失函数,但我得到以下错误: ValueError:无法从形状推断num(无,1) 这是我的自定义指标:使用循环在tensorflow中创建自定义损失函数,tensorflow,model,loss-function,Tensorflow,Model,Loss Function,我想使用y_true和y_pred为tensorflow模型创建一个自定义损失函数,但我得到以下错误: ValueError:无法从形状推断num(无,1) 这是我的自定义指标: def custom_metric(y_true,y_pred): y_true = float(y_true) y_pred = float(y_pred) y_true = tf.unstack(y_true) y_pred = tf.unstack(y_pred) sq
def custom_metric(y_true,y_pred):
y_true = float(y_true)
y_pred = float(y_pred)
y_true = tf.unstack(y_true)
y_pred = tf.unstack(y_pred)
sqr_pred_error = K.square(y_true - y_pred)
sqr_y_true = K.square(y_true)
r = []
for i in y_true:
if sqr_pred_error[i] < sqr_y_true[i] or sqr_pred_error[i] == sqr_y_true[i]:
result = 1
print("result: 1")
else:
result = 0
print("result: 0")
r.append(result)
r = tf.stack(r)
return K.sum(r)/K.shape(r)
def自定义度量(y_真,y_pred):
y_真=浮动(y_真)
y_pred=浮动(y_pred)
y_true=tf.unstack(y_true)
y_pred=tf.unstack(y_pred)
sqr_pred_error=K.square(y_true-y_pred)
sqr_y_真=K平方(y_真)
r=[]
因为我是真的:
如果sqr_pred_error[i]
您可能不需要在其中设置循环。看起来你只需要一堆0和1
-如果1
sqr\u pred\u错误,当我将其用作度量时,它会起作用,但作为一种损失,我有以下消息错误:ValueError:没有为任何变量提供梯度:[“稠密/内核:0”,“稠密/偏差:0”,“稠密/内核:0”,“稠密/内核:0”,“稠密/内核:0”,“稠密/内核:0”,“稠密/偏差:0”]。有什么想法吗?@JasonGreffier,这很有道理。因为看看tf.where是如何运作的。它收集了一堆与预测本身无关的1和0。所以不会有梯度。我会看看,如果我尝试过的每件事都失败了,这件事是否能挽回损失,如果你成功了,让我来know@JasonGreffier是的,我还没有机会。今天我将试着看一看我没有看到你最后的评论。如果sqr_pred_出错,我将尝试它
def custom_metric(y_true,y_pred): y_true = tf.cast(y_true, 'float32') y_pred = tf.cast(y_pred, 'float32') sqr_pred_error = K.square(y_true - y_pred) sqr_y_true = K.square(y_true) res = tf.where(sqr_pred_error<=sqr_y_true, tf.ones_like(y_true), tf.zeros_like(y_true)) return K.mean(res)