跟随此链接: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:不支持任何值。