大佬教程收集整理的这篇文章主要介绍了获取 keras 模型中 3 个类的混淆矩阵,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
所以我有类似 (10000,178,3) 形状的数据,其中我有 10000 个样本,每个样本有 3 个不同的颜色通道(不是 RGB 通道),我将它们分为 3 个这样的类,所以我有 3 个标签 @H_618_3@0,1 & 2:
导入库:
@H_618_3@from keras.layers import Conv2D,MaxPooling2D,Flatten,Dense from keras.models import Sequential from keras import regularizers from keras.layers import Dense,Activation,Dropout,Batchnormalization from keras import optimizers import keras from keras.callBACks import LearningRatescheduler from tensorflow.keras import optimizers import tensorflow as tf from keras.layers import LeakyReLU from sklearn.metrics import classification_report,confusion_matrix
@H_618_3@label = np.where((np.array(val) < 0.1),np.where((np.array(val) < 0.2),1,2))
一个热编码:
@H_618_3@def to_one_hot(y,num_class=3): results = numpy.zeros((len(y),num_class)) for i,label in enumerate(y): results[i,label] = 1 return results y_Train_vec = to_one_hot(label)
用于训练和测试的拆分:
@H_618_3@rand_inDices = np.random.permutation(len(data)) Train_inDices = rand_inDices[0:7460] valID_inDices = rand_inDices[7460:len(data)] x_test = data_arraY[valID_inDices,:] y_test = y_Train_vec[valID_inDices,:].astype('float') x_Train = data_arraY[Train_inDices,:] y_Train = y_Train_vec[Train_inDices,:].astype('float')
然后我使用这个神经网络来训练这个数据集:
@H_618_3@weight_decay = 1e-4 model = Sequential() model.add(Conv2D(32,(20,20),padding='same',kernel_regularizer=regularizers.l2(weight_decay),input_shape=x_tr.shape[1:])) model.add(LeakyReLU(Alpha=0.01)) model.add(Batchnormalization()) model.add(Conv2D(32,(30,30),kernel_regularizer=regularizers.l2(weight_decay))) model.add(LeakyReLU(Alpha=0.01)) model.add(Batchnormalization()) model.add(MaxPooling2D(pool_size=(2,2))) model.add(Dropout(0.2)) model.add(Flatten()) model.add(Dense(1,activation='sigmoID')) model.sumMary()
然后我在这里训练它:
@H_618_3@def lr_schedule(epoch): lrate = 0.001 if epoch > 30: lrate = 0.0005 elif epoch > 60: lrate = 0.0003 return lrate batch_size = 128 opt_rms = tf.keras.optimizers.Adam() model.compile(loss= 'categorical_crossentropy',optimizer = opt_rms,metrics=['accuracy']) history = model.fit(x_Train,y_Train,batch_size,epochs=100,verbose=1,callBACks=[LearningRatescheduler(lr_schedulE)])
现在我想要 3 个班级的混淆矩阵,我知道如何为这样的 2 个班级做到这一点,但有人可以告诉我如何为 3 个班级做同样的事情:
@H_618_3@T=0.5 y_pred = model.preDict(x_val) y_pred_bool = y_pred>=T confusion_matrix(y_val,y_pred_bool)
你能不能得到 @H_618_3@y_pred_bool 的形状,然后发布几行看看它是什么样子?
但一般来说,如果您的目标存储在单个列中(形状 @H_618_3@(N,)):
@H_618_3@# Libraries import numpy as np from sklearn.metrics import confusion_matrix from sklearn.metrics import multilabel_confusion_matrix # Target and preDictions in (N,) shape y_true = np.array([0,1,2]) y_pred = np.array([0,1]) # Get confusion matrix confusion_matrix(y_true=y_true,y_pred=y_pred) > array([[1,0],[0,0]])
如果您的目标和预测标签被编码为指标列,您可以使用 @H_618_3@sklearn.metrics.multilabel_confusion_matrix。这将以一对一的方式为每个类产生一个混淆矩阵。例如:
@H_618_3@# Libraries import numpy as np from sklearn.metrics import confusion_matrix from sklearn.metrics import multilabel_confusion_matrix # Target and preDictions in (N,3) shape y_true = np.array([[1,1]]) y_pred = np.array([[1,0]]) # Get confusion matrix for each class multilabel_confusion_matrix(y_true=y_true,y_pred=y_pred) > array([[[2,1]],[[1,1],[[2,[1,0]]])
以上是大佬教程为你收集整理的获取 keras 模型中 3 个类的混淆矩阵全部内容,希望文章能够帮你解决获取 keras 模型中 3 个类的混淆矩阵所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。