gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 21:18:01 38 4
gpt4 key购买 nike

我得到这个错误:

sum() got an unexpected keyword argument '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 docu 中所述.

    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_truey_pred 是张量。因此,为了正确计算指标,您需要使用 keras.backend 功能。有关详细信息,请查看此 SO 问题 How to calculate F1 Macro in Keras?

  2. 或者你可以用 Keras GH issue 中提到的 hacky 方式来实现它.为此,您需要使用 model.fitcallbacks 参数。

    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()

关于python - 如何在 keras 中实现自定义指标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37657260/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com