我得到这个错误:
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)
除了对批处理执行循环和编辑源代码之外,是否可以实现自定义度量?
您可以在AUC metric函数中传递model.predict()。[这将在bacthes上迭代,因此最好使用model.predict_on_batch()。假设有一个类似softmax的层作为输出(输出概率),那么可以将其与sklearn.metric一起使用来获得AUC。
来自here
现在制定你的标准
问题是
y_pred
和y_true
不是NumPy数组,而是no或TensorFlow张量。所以你才犯了这个错误。您可以定义您的自定义度量,但必须记住它的参数是那些张量,而不是NumPy数组。
这里我要回答的是OP的主题问题,而不是他的确切问题。我这样做是因为当我搜索主题问题时,问题出现在顶部。
您可以通过两种方式实现自定义度量。
如Keras docu所述。
但这里你必须记住,正如Marcin Możejko的回答中提到的,
y_true
和y_pred
是张量。因此,为了正确计算度量,您需要使用keras.backend
功能。请看这个SO问题了解详细信息How to calculate F1 Macro in Keras?或者您可以用Keras GH issue中提到的方式来实现它。为此,您需要使用
callbacks
参数的model.fit
。相关问题 更多 >
编程相关推荐