我使用Keras训练了一个用于图像分类的卷积神经网络(CNN),它包含3个类别。结果很差,我试图理解分类器学到了什么和没学到什么。它只给我一个类的输出。有没有办法检查Keras中的分类器/神经网络训练了哪些类别?
例如,是否有分类器的一个方法或属性可以告诉我网络接触过的类别。这是可能的吗?
这是我的网络
classifier = Sequential()classifier.add(Conv2D(64, (5, 5), input_shape = (256, 256, 3), activation='relu'))classifier.add(Conv2D(64, (5, 5), activation = 'sigmoid'))classifier.add(MaxPooling2D(pool_size = (3,3)))classifier.add(Dense(units = 128, activation = 'relu'))classifier.add(Dense(units = 3, activation = 'softmax'))classifier.compile(optimizer = 'adam', loss = 'categorical_crossentropy', metrics = ['accuracy'])
出于实验目的,我使用了两种激活函数’relu’和’sigmoid’。我正在考虑仅在最后一层使用’sigmoid’和’softmax’。
回答:
我认为你的网络深度不够。我也建议除了最后一层使用softmax
外,其余都使用relu激活函数
。
我不确定你说的“网络接触过的类别”是指什么。它接触的是你训练数据的类别。如果你使用了生成器,你可以从数字中获取类名,如下所示:
label_map = (generator.class_indices)
更多相关信息请查看这里