python画菊花_python中使用keras训练mnist模型,用yellowbrick绘制模型的confusion_matrix(混淆矩阵)可视化...

时间:2025-03-19 17:16:59

1 importlmdb2 importnumpy as np3 importtensorflow as tf4 importbinascii5 importcaffe6 as plt7 importPIL.Image8 from io importBytesIO9

10 importkeras11 from keras importSequential12 from importDense, Flatten, Dropout, MaxPool2D, Conv2D13 from importBatchNormalization14

15 from importconfusion_matrix16 from importLabelEncoder17 from importcolor_sequence18 from importfind_text_color19

20

21 cmap = color_sequence("YlOrRd")22

23 with open('/workspace/jobs/20200114-013226-34ca/', 'r') as f:24 l =()25

26 y_test =[]27 for i inl:28 y_test.append(int((' ')[1][0]))29

30 y =(y_test)31 labels =(y)32

33 env_db = ('/workspace/jobs/20200114-013226-34ca/val_db')34

35 input_ids =[]36 input_data =[]37

38 with env_db.begin() as txn:39 cursor =()40

41 for key, value incursor:42 datum =.caffe_pb2.Datum()43 (value)44 s =BytesIO()45 ()46 (0)47 img =(s)48 img =(img)49 img =()50

51 input_ids.append(key)52 input_data.append(img)53

54 y_train =(input_data)55 y_train = y_train.reshape(-1, 28, 28, 1)56

57 #keras mnist network

58 model =Sequential()59 (Conv2D(32, kernel_size=(3, 3),activation='relu',kernel_initializer='he_normal',input_shape=(28,28,1)))60 (Conv2D(32, kernel_size=(3, 3),activation='relu',kernel_initializer='he_normal'))61 (MaxPool2D((2, 2)))62 (Dropout(0.20))63 (Conv2D(64, (3, 3), activation='relu',padding='same',kernel_initializer='he_normal'))64 (Conv2D(64, (3, 3), activation='relu',padding='same',kernel_initializer='he_normal'))65 (MaxPool2D(pool_size=(2, 2)))66 (Dropout(0.25))67 (Conv2D(128, (3, 3), activation='relu',padding='same',kernel_initializer='he_normal'))68 (Dropout(0.25))69 (Flatten())70 (Dense(128, activation='relu'))71 (BatchNormalization())72 (Dropout(0.25))73

74 (Dense(10, activation='softmax'))75

76 (loss='mse',77 optimizer=(),78 metrics=['accuracy'])79

80 y2 = .to_categorical(y, 10)81 (y_train, y2, epochs=100, batch_size=32)82

83 y_pred =model.predict_classes(y_train)84

85 yp =(y)86 if in {"i", "u"}:87 idx =yp88 else:89 idx =LabelEncoder().fit_transform(yp)90 y_true =(labels)[idx]91

92 yp =(y_pred)93 if in {"i", "u"}:94 idx =yp95 else:96 idx =LabelEncoder().fit_transform(yp)97 y_pred =(labels)[idx]98

99 c_m = confusion_matrix(y_true, y_pred, labels=labels)100

101 print("c_m >>>>>>> \n", c_m)102

103 class_count = dict(zip(*(y_true, return_counts=True)))104 selected_class_counts =[]105 for c inlabels:106 try:107 selected_class_counts.append(class_count[c])108 exceptKeyError:109 selected_class_counts.append(0)110 class_counts =(selected_class_counts)111

112 cm_display = c_m[::-1, ::]113 n_classes =len(labels)114 X, Y = (n_classes + 1), (n_classes + 1)115

116 ax =()117

118 ax.set_ylim(bottom=0, top=cm_display.shape[0])119 ax.set_xlim(left=0, right=cm_display.shape[1])120

121 xticklabels =labels122 yticklabels = labels[::-1]123 ticks = (n_classes) + 0.5

124

125 (xticks=ticks, yticks=ticks)126 ax.set_xticklabels(xticklabels, rotation="vertical")127 ax.set_yticklabels(yticklabels)128

129 edgecolors =[]130

131 for x in X[:-1]:132 for y in Y[:-1]:133 value =cm_display[x, y]134 svalue = "{:0.0f}".format(value)135

136 base_color = cmap(value /cm_display.max())137 text_color =find_text_color(base_color)138

139 if cm_display[x, y] ==0:140 text_color = "0.75"

141

142 cx, cy = x + 0.5, y + 0.5

143 (144 cy,145 cx,146 svalue,147 va="center",148 ha="center",149 color=text_color150 )151 lc = "k" if xticklabels[x] == yticklabels[y] else "w"

152 (lc)153

154 vmin = 0.00001

155 vmax =cm_display.max()156

157 (158 X,159 Y,160 cm_display,161 vmin=vmin,162 vmax=vmax,163 edgecolor=edgecolors,164 cmap=cmap,165 linewidth="0.01",166 )167

168 #()

169 ("/data/domon/confusion_matrix.png")