如何在keras中实现自定义指标?

2024-01-03

我收到此错误:

sum() 得到了意外的关键字参数“out”

当我运行这段代码时:

import pandas as pd, numpy as np
import keras
from keras.layers.core import Dense, Activation
from keras.models import Sequential

def AUC(y_true,y_pred):
    not_y_pred=np.logical_not(y_pred)
    y_int1=y_true*y_pred
    y_int0=np.logical_not(y_true)*not_y_pred
    TP=np.sum(y_pred*y_int1)
    FP=np.sum(y_pred)-TP
    TN=np.sum(not_y_pred*y_int0)
    FN=np.sum(not_y_pred)-TN
    TPR=np.float(TP)/(TP+FN)
    FPR=np.float(FP)/(FP+TN)
    return((1+TPR-FPR)/2)

# Input datasets

train_df = pd.DataFrame(np.random.rand(91,1000))
train_df.iloc[:,-2]=(train_df.iloc[:,-2]>0.8)*1


model = Sequential()
model.add(Dense(output_dim=60, input_dim=91, init="glorot_uniform"))
model.add(Activation("sigmoid"))
model.add(Dense(output_dim=1, input_dim=60, init="glorot_uniform"))
model.add(Activation("sigmoid"))

model.compile(optimizer='rmsprop',loss='binary_crossentropy',metrics=[AUC])


train_df.iloc[:,-1]=np.ones(train_df.shape[0]) #bias
X=train_df.iloc[:,:-1].values
Y=train_df.iloc[:,-1].values
print X.shape,Y.shape

model.fit(X, Y, batch_size=50,show_accuracy = False, verbose = 1)

除了批量循环和编辑源代码之外,是否可以实现自定义指标?


在这里,我正在回答OP的主题问题,而不是他的确切问题。当我用谷歌搜索主题问题时,问题出现在顶部,我正在这样做。

您可以通过两种方式实现自定义指标。

  1. 正如中提到的Keras 文档 https://keras.io/metrics#custom-metrics.

    import keras.backend as K
    
    def mean_pred(y_true, y_pred):
        return K.mean(y_pred)
    
    model.compile(optimizer='sgd',
              loss='binary_crossentropy',
              metrics=['accuracy', mean_pred])
    

    但在这里你必须记住,正如 Marcin Możejko 的回答中提到的那样y_true and y_pred是张量。因此,为了正确计算您需要使用的指标keras.backend功能。请查看这个SO问题了解详细信息如何在Keras中计算F1宏? https://stackoverflow.com/questions/43547402/how-to-calculate-f1-macro-in-keras

  2. 或者您可以按照中提到的方式以 hacky 方式实现它Keras GH问题 https://github.com/keras-team/keras/issues/5794#issuecomment-303683985。为此你需要使用callbacks的论证model.fit.

    import keras as keras
    import numpy as np
    from keras.optimizers import SGD
    from sklearn.metrics import roc_auc_score
    
    model = keras.models.Sequential()
    # ...
    sgd = SGD(lr=0.001, momentum=0.9)
    model.compile(optimizer=sgd, loss='categorical_crossentropy', metrics=['accuracy'])
    
    
    class Metrics(keras.callbacks.Callback):
        def on_train_begin(self, logs={}):
            self._data = []
    
        def on_epoch_end(self, batch, logs={}):
            X_val, y_val = self.validation_data[0], self.validation_data[1]
            y_predict = np.asarray(model.predict(X_val))
    
            y_val = np.argmax(y_val, axis=1)
            y_predict = np.argmax(y_predict, axis=1)
    
            self._data.append({
                'val_rocauc': roc_auc_score(y_val, y_predict),
            })
            return
    
        def get_data(self):
            return self._data
    
    metrics = Metrics()
    history = model.fit(X_train, y_train, epochs=100, validation_data=(X_val, y_val), callbacks=[metrics])
    metrics.get_data()
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在keras中实现自定义指标? 的相关文章

随机推荐

  • Actionscript 3:您需要删除事件监听器吗?

    在 ActionScript 3 中 我动态创建对象并添加事件监听器 这些对象被添加到数组中 稍后可能会再次删除 其他的可能稍后会再次添加 每次创建对象时 我都会将这些 EventListener 添加到其中 但是 在删除这些对象时是否也需
  • 从 AsyncTaskLoader 更新 UI

    我已经转换了我的AsyncTask to an AsyncTaskLoader 主要是为了处理配置更改 我有一个TextView我正在使用进度状态并且正在使用onProgressUpdate in the AsyncTask来更新它 看起来
  • EmberJS 嵌套视图和控制器

    我正在使用 EmberJS v1 0 pre 编写一个应用程序 我有一个ArrayController其中包含所有人的列表 有一堆嵌套视图显示人 他们的宠物以及每只宠物的注释 John lt Person Quincy Dog lt Pet
  • django unittest:即使我发送令牌,client.get 错误 401

    我尝试为方法注销创建一个单元测试 我有这个目的 response client get api v1 logout self assertEquals response status code 200 但在我的注销控制器中我有这个 perm
  • 长数字的 JSON 解组给出浮点数

    例如 我使用 golang 编组和解组 JSON 当我想使用数字字段时 golang 将其转换为浮点数 而不是使用长数字 我有以下 JSON id 12423434 Name Fernando After marshal它到地图上并且unm
  • Django 中随机发生运行时错误死锁

    在 Python 3 7 9 中运行 Django 我正在使用通道 因此使用 daphne 但即使我使用 Gunicorn 也会获得相同的结果 下面的错误是随机出现的 ERROR 2021 07 12 11 55 07 478 HTTP G
  • Fortran - lbound 抛出错误 6366“数组表达式的形状不符合”

    所以我又被Fortran弄糊涂了 去搞清楚 不管怎样 我正在尝试编写一个非常简单的例程 将值从数组末尾剥离 一切复杂的工作都很好 除了我想编写子例程 这样我就不必将输入数组的下限传递给它 这是子程序 subroutine Strip lis
  • Linux内核:从内核空间调用用户空间的回调函数

    我正在编写 Linux 用户空间应用程序 我想从内核空间调用用户空间区域中注册的回调函数 即中断到达 GPIO 引脚 开关按下事件 并在用户空间中调用注册函数 有没有什么方法可以做到这一点 Thanks 经过大量挖掘后 我发现了下面的代码
  • 将 HTML 转换为 Word DOC,其中我有输入字段

    从 HTML 转换为 DOC 的问题在于输入字段 是否可以仅从输入字段中提取 DOC 值 而不是直接从浏览器中提取整个元素 HTML 示例 div class source html outer div h1 h1 div div
  • 如何处理bigquery中的动态模式

    我的数据如下所示 第 1 行 id 1 object user metadata name 1234 第 2 行 id 1 object user metadata name 1234 email email protected cdn c
  • 从方案列表中删除所有重复成员

    我正在尝试使用递归删除列表中的重复项 这就是我所拥有的 它仅删除第一个重复项 而不是全部 我的想法是查看第一个成员 检查它是否是列表其余部分的成员 如果是 则再次调用该函数 如果没有 则创建一个包含第一个成员和再次调用该函数的结果的列表 我
  • 如何在单个图表中可视化多态调用?

    首先 看一下这些Java代码 Drawable java package examples simple model public interface Drawable public void draw 形状 java package ex
  • 如何找到jqgrid中的最后一行

    目前我正在研究 jqgrid 我必须找出最后一行并实现 ctrl down 功能 但目前我无法获得最后一排 这里需要有人帮助 提前致谢 如果网格 id 是例如list那么下面的表达式应该返回最后一行 list find gt tbody g
  • 如何使用 clojure 作为 Java 程序的脚本语言?

    对于用 Java 编写的服务器程序 我需要为 待指定的 查询语言添加解释器 用户应该能够将自己编写的查询 程序 发送到该服务器 并接收返回的结果 基本上只是一个字符串列表 查询的语言尚未指定 所以我想在这里使用 clojure 作为脚本语言
  • Google 图表 - 避免在 yAxis 中显示负值

    我有以下代码 function drawVisualization Create and populate the data table var data google visualization arrayToDataTable Year
  • 如何使用python解析ld+json

    我一直在尝试一些网络抓取 并且发现了位于此标签内的一些有趣的数据
  • Swift 中如何判断泛型是否是可选的?

    我想用一个函数扩展一个数组 该函数将返回数组中所有非零项的计数 理想情况下 这适用于任何可选或非可选类型的数组 我尝试了各种方法 但都无法编译 使 Xcode 崩溃或两者兼而有之 我本以为它会是这样的 extension Array fun
  • `const T` 和 `T` 在获取其嵌套类型时没有区别吗?

    include
  • 在 ASP.Net Core 中全局设置日志记录范围

    我想要获取 ASP Net Core 服务中每条日志消息中记录的某些关键信息 服务名称 服务版本 主机名等 我有以下代码 public class Program public static void Main string args va
  • 如何在keras中实现自定义指标?

    我收到此错误 sum 得到了意外的关键字参数 out 当我运行这段代码时 import pandas as pd numpy as np import keras from keras layers core import Dense Ac