Python 3.x 如何在CNN Keras模型中创建ROC、FAR、FRR?

Python 3.x 如何在CNN Keras模型中创建ROC、FAR、FRR?,python-3.x,keras,classification,face-recognition,roc,Python 3.x,Keras,Classification,Face Recognition,Roc,我正在做我的最后一个项目,CNN人脸识别,我是这个领域的新手,正在寻求建议 我已经在Keras建立了CNN模型,并在Faces94上进行了训练,我的准确率达到了90.97% 现在,我正在尝试绘制CRO,FAR,FRR 我试过很多代码,但都不管用。你能帮帮我吗 PFB我的代码: 导入keras 从keras导入后端为K 导入操作系统 从keras.layers.advanced_激活导入LeakyReLU 来自未来导入打印功能 从keras.dataset导入mnist 将matplotlib.p

我正在做我的最后一个项目,CNN人脸识别,我是这个领域的新手,正在寻求建议

我已经在Keras建立了CNN模型,并在Faces94上进行了训练,我的准确率达到了90.97%

现在,我正在尝试绘制CRO,FAR,FRR

我试过很多代码,但都不管用。你能帮帮我吗

PFB我的代码:

导入keras
从keras导入后端为K
导入操作系统
从keras.layers.advanced_激活导入LeakyReLU
来自未来导入打印功能
从keras.dataset导入mnist
将matplotlib.pylab作为plt导入
从导入lib导入重新加载
def set_keras_后端(后端):
如果K.backend()!=后端:
os.environ['KERAS_BACKEND']=后端
重新加载(K)
断言K.backend()==后端
设置keras后端(“tensorflow”)
DATA=joblib.load(打开('DATA.sav','rb'))
LABEL=joblib.load(打开('Lable.sav','rb'))
打印(DATA.shape)
打印(标签.形状)
打印(tf.\U版本\U)
X_序列,X_测试,y_序列,y_测试=序列测试分割(数据,标签,测试大小=0.30,随机状态=45)
打印(X_列形状)
打印(X_测试形状)
打印(y_列形状)
打印(y_测试形状)
打印(X_列[0])
X_列=np.整形(X_列,(X_列形状[0],200180,1))
X_检验=np.重塑(X_检验,(X_检验.形状[0],200180,1))
#将数据从二进制转换为浮点
X_-train=X_-train.astype('float32')
X_test=X_test.astype('float32')
X_列/=255
X_检验/=255
模型=顺序()
add(Conv2D(32,内核大小=(5,5),步长=(1,1),
激活='relu',
输入_形=([200180,1]))
模型添加(LeakyReLU(α=0.1))
model.add(MaxPoolig2D(池大小=(2,2)))
#添加另一个2D卷积层和2D max池层,具有64个输出通道
model.add(Conv2D(64,(5,5),activation='relu'))
模型添加(LeakyReLU(α=0.1))
model.add(MaxPoolig2D(池大小=(2,2)))
#添加另一个2D卷积层和2D max池层,具有128个输出通道
model.add(Conv2D(128,(5,5),activation='relu'))
模型添加(LeakyReLU(α=0.1))
model.add(MaxPoolig2D(池大小=(2,2)))
模型。添加(辍学率(0.30))
model.add(展平())
model.add(密集(1000,activation='relu'))
模型。添加(辍学率(0.5))
model.add(密集型(72,activation='softmax'))
#在编译模型时,我们声明loss函数和优化器
compile(loss=keras.loss.categorical_crossentropy,optimizer=keras.optimizers.Adam(),metrics=['accurity']))
#训练模型
hist=model.fit(X_序列,Y_序列,批量大小=32,历次=12,详细=1,验证数据=(X_测试,Y_测试))
分数=模型。评估(X_检验,Y_检验,详细度=0)
打印(“%s:%.2f%%”%(“准确性”,分数[1]*100))

当然!有一个为AUC计算发布的代码片段,但您可以修改它以获得FRR和FAR()。 为了存储计算值,您可以实现一些并在最后绘制它们

# AUC for a binary classifier

def auc(y_true, y_pred):
    ptas = tf.stack([binary_PTA(y_true,y_pred,k) for k in np.linspace(0, 1, 1000)],axis=0)
    pfas = tf.stack([binary_PFA(y_true,y_pred,k) for k in np.linspace(0, 1, 1000)],axis=0)
    pfas = tf.concat([tf.ones((1,)) ,pfas],axis=0)
    binSizes = -(pfas[1:]-pfas[:-1])
    s = ptas*binSizes
    return K.sum(s, axis=0)

# PFA, prob false alert for binary classifier
def binary_PFA(y_true, y_pred, threshold=K.variable(value=0.5)):
    y_pred = K.cast(y_pred >= threshold, 'float32')
    # N = total number of negative labels
    N = K.sum(1 - y_true)
    # FP = total number of false alerts, alerts from the negative class labels
    FP = K.sum(y_pred - y_pred * y_true)
    return FP/N

# P_TA prob true alerts for binary classifier
def binary_PTA(y_true, y_pred, threshold=K.variable(value=0.5)):
    y_pred = K.cast(y_pred >= threshold, 'float32')
    # P = total number of positive labels
    P = K.sum(y_true)
    # TP = total number of correct alerts, alerts from the positive class labels
    TP = K.sum(y_pred * y_true)
    return TP/P