问题描述
这是我模型的架构:
def generate_network_2 (lr = 3e-3,drop = 0.4):
#filters = 64
model = keras.models.Sequential()
model.add(keras.layers.Conv2D(64,kernel_size = 5,strides = 2,activation = 'relu',padding = "same",input_shape = (312,312,3)))
model.add(keras.layers.normalization.Batchnormalization())
model.add(keras.layers.MaxPooling2D((2,2),padding = "same"))
model.add(keras.layers.normalization.Batchnormalization())
model.add(keras.layers.Conv2D(128,kernel_size = 3,activation="relu",padding = "same"))
model.add(keras.layers.normalization.Batchnormalization())
model.add(keras.layers.Conv2D(128,padding = "same"))
model.add(keras.layers.normalization.Batchnormalization())
model.add(keras.layers.MaxPooling2D((2,padding = "same"))
model.add(keras.layers.normalization.Batchnormalization())
model.add(keras.layers.Conv2D(256,padding = "same"))
model.add(keras.layers.normalization.Batchnormalization())
model.add(keras.layers.Conv2D(256,padding = "same"))
model.add(keras.layers.normalization.Batchnormalization())
model.add(keras.layers.MaxPooling2D((2,padding = "same"))
model.add(keras.layers.normalization.Batchnormalization())
model.add(keras.layers.Flatten())
model.add(keras.layers.normalization.Batchnormalization())
model.add(keras.layers.Dense(64,activation = "relu"))
model.add(keras.layers.Dropout(drop))
model.add(keras.layers.normalization.Batchnormalization())
model.add(keras.layers.Dense(16,activation = "relu"))
model.add(keras.layers.Dropout(drop))
model.add(keras.layers.normalization.Batchnormalization())
model.add(keras.layers.Dense(3,activation = "softmax"))
optimizer = keras.optimizers.Adam(learning_rate = lr)
model.compile(loss='categorical_crossentropy',optimizer=optimizer,metrics=['accuracy'])
return model
当我在验证数据集上运行 model.evaluate 时,我获得了 69% 的准确率。但是,当我使用 model.predict 手动计算准确度和混淆矩阵时,我得到了 ~ 31%
model.evaluate(valid_gen)
4/4 [==============================] - 2 秒 506 毫秒/步 - 损失:0.7732 - 准确度: 0.6917 [0.773181676864624,0.6916666626930237]
def print_cm(cm,labels):
"""pretty print for confusion matrixes"""
columnwidth = max([len(x) for x in labels])
# Print header
print(" " * columnwidth,end="\t")
for label in labels:
print("%{0}s".format(columnwidth) % label,end="\t")
print()
# Print rows
for i,label1 in enumerate(labels):
print("%{0}s".format(columnwidth) % label1,end="\t")
for j in range(len(labels)):
print("%{0}d".format(columnwidth) % cm[i,j],end="\t")
print()
pred = np.argmax(model.predict(valid_data),axis=-1)
actual = valid_data.classes
cm = confusion_matrix(actual,pred)
print('Confusion Matrix')
print_cm(cm,["0","1","2"])
混淆矩阵
0 1 2
0 9 12 15
1 8 16 14
2 12 19 15
Classification Report
precision recall f1-score support
0 0.31 0.25 0.28 36
1 0.34 0.42 0.38 38
2 0.34 0.33 0.33 46
accuracy 0.33 120
宏观平均值 0.33 0.33 0.33 120 加权平均 0.33 0.33 0.33 12
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)