自定义损失函数中的Keras值错误

时间:2018-06-21 18:34:31

标签: python tensorflow neural-network keras tensor

编辑:

跟随此链接:TensorFlow: using a tensor to index another tensor

我已经解决了。

def my_loss(yTrue,yPred):

 pred_casted=K.cast(yPred, "int32")
 real_pred=K.gather(t_best_x, pred_casted)
 true_casted=K.cast(yTrue, "int32")
 real_true=K.gather(t_best_x, true_casted)
 real_loss=K.difference(real_pred, real.true) #i actually don’t know the name of this function, but I’m positive something like this exist
 mean_loss=K.mean(real_loss, axis=-1)

 return mean_loss

但是当我尝试训练模型时,出现以下错误:

  

make_tensor_proto中的第371行的文件“ /usr/local/lib/python3.5/dist-packages/tensorflow/python/framework/tensor_util.py”       引发ValueError(“不支持任何值。”)

强烈建议您提供有关如何解决此问题以及导致此原因的建议。注意:使用注释的“ classical_loss_mse”,一切正常。

页面末尾的错误全堆。

原始文本

我有一个带有自定义Loss函数的经典Keras NN

network.compile(loss=my_loss, optimizer='Adam', metrics=['mse'])

我正在尝试创建自定义损失函数(my_loss)

def my_loss(yTrue,yPred):

每个预测的值是0到1000之间的一个浮点数。 对于我的NN的每个预测,我都有一个数组,其中包含结果的“适合度”。 像这样:

fitness[int(prediction)] = 0.8 #example
len(my_array)
> 1000

我要创建(我需要)的损失函数的概念是:

  

1-my_array [int(yPred)]

现在,不是我可以做int(yPred)... yPred是张量。我该如何工作?

我将尝试使用伪非工作示例来更正确地解释我到底想要什么:

def my_loss(yTrue,yPred):
    true_loss=[]    
    for prediction in yPred:
        true_loss.append(1-fitness[round(prediction)]) # fitness[round(any yTrue)] = 1
    return true_loss

注意:适应度是包含普通浮点数的普通列表

完全堆栈错误

  

文件   “ /home/federico/.local/lib/python3.5/site-packages/spyder/utils/site/sitecustomize.py”,   运行文件中的第710行       execfile(文件名,命名空间)

     

文件   “ /home/federico/.local/lib/python3.5/site-packages/spyder/utils/site/sitecustomize.py”,   第101行,在execfile中       exec(compile(f.read(),文件名,'exec'),命名空间)

     

文件“ /home/federico/CLionProjects/monte/EXP2-STILLNOTWORKING.py”,   第201行,在       callbacks = [TrainValTensorBoard(log_dir ='。/ logs /'+ time.strftime(“%Y-%m-%d_%H-%M-%S-”)   +名称,histogram_freq = 0,write_graph = False,write_images = False),回调。EarlyStopping(monitor ='val_loss',   patience = 200,mode ='auto')])#用于评估的数据

     

文件“ /usr/local/lib/python3.5/dist-packages/keras/models.py”,行   适合的960       validate_steps = validation_steps)

     

文件   “ /usr/local/lib/python3.5/dist-packages/keras/engine/training.py”,   1634行,适合       self._make_train_function()

     

文件   “ /usr/local/lib/python3.5/dist-packages/keras/engine/training.py”,   _make_train_function中的第990行       loss = self.total_loss)

     

文件   “ /usr/local/lib/python3.5/dist-packages/keras/legacy/interfaces.py”,   包装中的第87行       返回func(* args,** kwargs)

     

文件“ /usr/local/lib/python3.5/dist-packages/keras/optimizers.py”,   get_updates中的第432行       m_t =(self.beta_1 * m)+(1.-self.beta_1)* g

     

文件   “ /usr/local/lib/python3.5/dist-packages/tensorflow/python/ops/math_ops.py”,   第885行,在binary_op_wrapper中       y = ops.convert_to_tensor(y,dtype = x.dtype.base_dtype,name =“ y”)

     

文件   “ /usr/local/lib/python3.5/dist-packages/tensorflow/python/framework/ops.py”,   第836行,在convert_to_tensor中       as_ref = False)

     

文件   “ /usr/local/lib/python3.5/dist-packages/tensorflow/python/framework/ops.py”,   第926行,位于internal_convert_to_tensor中       ret = conversion_func(value,dtype = dtype,name = name,as_ref = as_ref)

     

文件   “ /usr/local/lib/python3.5/dist-packages/tensorflow/python/framework/constant_op.py”,   _constant_tensor_conversion_function中的第229行       返回常量(v,dtype = dtype,name = name)

     

文件   “ /usr/local/lib/python3.5/dist-packages/tensorflow/python/framework/constant_op.py”,   第208行,常数       值,dtype = dtype,shape = shape,verify_shape = verify_shape))

     

文件   “ /usr/local/lib/python3.5/dist-packages/tensorflow/python/framework/tensor_util.py”,   第371行,在make_tensor_proto中       引发ValueError(“不支持任何值。”)

     

ValueError:不支持任何值。

0 个答案:

没有答案