当前位置: 首页 > 知识库问答 >
问题:

Keras自定义损失:直方图

令狐钧
2023-03-14

我在Tensorflow后端使用Keras。我想创建一个自定义损失函数,它将获得两个直方图之间的欧几里德距离,但我得到了以下错误:

TypeError:“Mul”Op的输入“y”的类型float32与参数“x”的类型int32不匹配。

因此,我不知道如何定义我的损失函数。

def myloss(y_true, y_pred):

 
  h_true = tf.histogram_fixed_width( y_true, value_range=(0,1), nbins=20) 
 
  h_pred = tf.histogram_fixed_width( y_pred, value_range=(0,1), nbins=20) 
 
  return K.mean(K.square(h_true - h_pred))

我试图修改代码,但我得到另一个错误。“h_true=tf.cast(h_true,dtype=tf.dtypes.float32)AttributeError:模块'tensorflow.\u api.v1.dtypes'没有属性'float32'”

def myloss(y_true,y_pred):

 h_true = tf.histogram_fixed_width( y_true, value_range=(0,1), nbins=20) 

 h_pred = tf.histogram_fixed_width( y_pred, value_range=(0,1), nbins=20) 

 h_true = tf.cast(h_true, dtype=tf.dtypes.float32)

 h_pred = tf.cast(h_pred, dtype=tf.dtypes.float32)

 return K.mean(K.square(h_true - h_pred))

最后,这个问题由Jakub解决。解决办法是:

def myloss(y_true,y_pred):

 h_true = tf.histogram_fixed_width( y_true, value_range=(0,1), nbins=20)

 h_pred = tf.histogram_fixed_width( y_pred, value_range=(0,1), nbins=20) 

 h_true = tf.cast(h_true, dtype="float32")

 h_pred = tf.cast(h_pred, dtype="float32")

 return K.mean(K.square(h_true - h_pred))

共有1个答案

公孙成仁
2023-03-14

错误

TypeError: Input 'y' of 'Mul' Op has type float32 that does not match 
  type int32 of argument 'x'.

指示需要将张量转换为公共数据类型。在这种情况下,Float32可能是一种很好的数据类型。值可以使用

x = tf.cast(x, "float32")
 类似资料:
  • 问题内容: 在Keras中,如果您需要自定义损失以及其他参数,我们可以像https://datascience.stackexchange.com/questions/25029/custom- loss-function-with-additional-parameter-in- 凯拉斯 当我训练模型时,上述方法有效。但是,一旦训练了模型,我将很难加载模型。当我尝试在load_model中使用c

  • 嗨,我一直试图使一个自定义损失函数在kerasdice_error_coefficient。它有它的实现在张量板和我尝试使用相同的函数在keras与张量流但它不断返回一个NoneType当我使用model.train_on_batch或model.fit在那里,因为它给适当的值时,使用在模型中的指标...能不能请人帮帮我我该怎么办?我尝试过跟随像Keras-FCN这样的库,在那里他使用了自定义损失

  • 我手头有一个问题,它优化了一个损失函数,而不是y_pred和y_true的函数。通过Keras留档后,我发现所有自定义损失函数必须是y_pred和y_true的函数。 在Keras中是否有其他方法实现我的损失函数?

  • 我有一个NN,它有两个相同的CNN(类似于暹罗网络),然后合并输出,并打算在合并的输出上应用自定义损失函数,如下所示: 在我的自定义损失函数中,我需要将y垂直分解为两块,然后对每一块应用分类交叉熵损失。但是,我不断从我的损失函数得到dtype错误,例如: ()中的ValueError回溯(最近一次调用)---- /usr/local/lib/python3。5/地区包/KERA/发动机/培训。编译

  • 我试图在Keras中构造一个自定义损失函数-这是用于生存分析中的删失数据。 这种损失函数本质上是二元交叉熵,即多标签分类,但是损失函数中的求和项需要根据Y_true标签的可用性而变化。见下面的例子: 示例1:Y_可用的所有标签均为True Y_true=[0,0,0,1,1] Y_pred=[0.1,0.2,0.2,0.8,0.7] 损失=-1/5(log(0.9)log(0.8)log(0.8)

  • 问题内容: 我找不到Keras如何定义“准确性”和“损失”。我知道我可以指定不同的指标(例如mse,交叉熵),但是keras会打印出标准的“准确性”。如何定义?同样对于损失:我知道我可以指定不同类型的正则化- 损失中的那些正则化吗? 理想情况下,我想打印出用于定义它的公式;如果没有,我会在这里解决。 问题答案: 看一下,您可以在其中找到所有可用指标的定义,包括不同类型的准确性。除非在编译模型时将其