loss降低 acc不升高_Kreas--画ROC、loss和ACC曲线

一、画ROC曲线

Y_pred = parallel_model.predict(val_X0,batch_size=batch)  #val_X0为数据
Y_pred =Y_pred[:500]                                      #Y_pred为数据的预测值(预测的标签)
Y_train=val_Y0[:500]              #Y_train 为数据的真实标签,这里是one hot 格式一个样本对应2*1的标签
#############################


Y_pred_0 = [y[1] for y in Y_pred]  # 取出y中的一列
Y_train0 = [y[1] for y in Y_train]

import matplotlib.pyplot as plt
from sklearn.metrics import roc_curve
from sklearn.metrics import auc
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.metrics import recall_score,accuracy_score
from sklearn.metrics import precision_score,f1_score
from keras.optimizers import Adam,SGD,sgd
from keras.models import load_model
#Y_train0为真实标签,Y_pred_0为预测标签,注意,这里roc_curve为一维的输入,Y_train0是一维的
fpr, tpr, thresholds_keras = roc_curve(Y_train0, Y_pred_0)   
auc = auc(fpr, tpr)
print("AUC : ", auc)
plt.figure()
plt.plot([0, 1], [0, 1], 'k--')
plt.plot(fpr, tpr, label='S3< val (AUC = {:.3f})'.format(auc))
plt.xlabel('False positive rate')
plt.ylabel('True positive rate')
plt.title('ROC curve')
plt.legend(loc='best')
#plt.savefig('A_ROC/0123-4val.jpg')
plt.show()    
  1. 如果样本较少,画出来的ROC曲线是这种不光滑的,如果样本较多,比如几十万几万,光滑的ROC曲线是正常的

loss降低 acc不升高_Kreas--画ROC、loss和ACC曲线_第1张图片
少量样本500

loss降低 acc不升高_Kreas--画ROC、loss和ACC曲线_第2张图片
大样本,二十万左右

2.有人可能会奇怪为什么他画出来的图是这种只有一个拐点的,因为你可能没有用预测值去画,比如下面这种情况,这也是为什么前面要用 [y[1] for y in Y_pred]

print("Predicting")
Y_pred = model.predict(X_valid)
Y_pred = [np.argmax(y) for y in Y_pred]  # 取出y中元素最大值所对应的索引
Y_valid = [np.argmax(y) for y in Y_valid]

fpr, tpr, thresholds_keras = roc_curve(Y_valid, Y_pred)

loss降低 acc不升高_Kreas--画ROC、loss和ACC曲线_第3张图片

二、history记录loss和ACC, matplotlib保存

history=parallel_model.fit(X, Y, epochs=300, batch_size=batch,validation_data=(X_test,Y_test))
import matplotlib.pyplot as plt
epochs = len(history.history['loss'])
plt.plot(range(0,epochs,1), history.history['loss'], label='train_loss')
plt.plot(range(0,epochs,1), history.history['val_loss'], label='test_loss')
plt.xlabel('epochs')
plt.ylabel('loss')
plt.legend()
plt.savefig("A-Res/Unet-过拟合C0.jpg")
plt.show()

loss降低 acc不升高_Kreas--画ROC、loss和ACC曲线_第4张图片

三、如果你发现你保存的图片是空白的,多半是你把plt.show()和plt.savefig() 的先后顺序弄反了,调过来试试。

你可能感兴趣的:(loss降低,acc不升高)