在这里,我在回答OP的主题问题,而不是他的确切问题。我正在执行此操作,是因为当我搜索主题问题时该问题会显示在顶部。
您可以通过两种方式实现自定义指标。
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])
但是在这里,您必须记住,正如MarcinMożejko的答案所提到的那样,
y_true
和y_pred
是张量。因此,为了正确计算指标,您需要使用keras.backend
功能。请查看此SO问题以获取详细信息如何在Keras中计算F1宏?或者,您也可以按照Keras GH问题中提到的方法来实现它。为此,您需要使用
model.fit
callbacks
参数。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()
0
我收到此错误:
当我运行此代码时:
除了对批处理进行循环并编辑源代码之外,是否可以实现自定义指标?