我使用Keras的cifar100数据集创建了CNN模型。当添加top_k_categorical_accuracy指标时,我应该看到前5个预测类之一是正确类的准确性。但是,训练时,top_k_categorical_accuracy保持很小,约为4-5%,因为准确性和验证准确性一直提高到40-50%。前5个准确度应比正常准确度高得多,相反,它给出的结果非常奇怪。我使用不同的k值编写了自己的指标,但仍然存在相同的问题。即使当我使用k = 1时,也应该给出相同的精度值,也会出现相同的问题。
型号代码:
cnn = Sequential()
cnn.add(Conv2D(filters=200, kernel_size=2, padding='same', activation='relu', input_shape=(train_images.shape[1:])))
cnn.add(Conv2D(filters=200, kernel_size=2, padding='same', activation='relu'))
cnn.add(Conv2D(filters=200, kernel_size=2, padding='same', activation='relu'))
cnn.add(MaxPooling2D(pool_size=2, padding='same'))
cnn.add(Dropout(0.4))
cnn.add(Conv2D(filters=200, kernel_size=2, padding='same', activation='relu'))
cnn.add(Conv2D(filters=200, kernel_size=2, padding='same', activation='relu'))
cnn.add(Conv2D(filters=200, kernel_size=2, padding='same', activation='relu'))
cnn.add(Conv2D(filters=200, kernel_size=2, padding='same', activation='relu'))
cnn.add(Dropout(0.4))
cnn.add(MaxPooling2D(pool_size=2, padding='same'))
cnn.add(Dropout(0.5))
cnn.add(Flatten())
cnn.add(Dense(550, activation='relu'))
cnn.add(Dropout(0.4))
cnn.add(Dense(100, activation='softmax'))
编译代码:
cnn.compile(loss='sparse_categorical_crossentropy', optimizer=opt.Adam(lr=learn_rate), metrics=['accuracy', 'top_k_categorical_accuracy'])
答案 0 :(得分:1)
结果是,由于我正在使用sparse_categorical_crossentropy损失函数,因此我需要使用sparse_top_k_categorical_accuracy函数。此度量标准还要求将标签展平到一个维度。之后,指标正确,模型正在训练!