【发布时间】:2018-09-26 06:53:40
【问题描述】:
我使用 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'])
【问题讨论】:
-
标签似乎是稀疏的(即您没有对它们进行一次性编码),因为您使用了
sparse_categorical_crossentropy作为损失。如果是这种情况,那么您需要改用sparse_top_k_categorical_accuracy作为指标。 -
哇,甚至没看到。非常感谢。我还在源代码中看到需要将标签从 (samples, 1) 展平为 (samples,)。完成后,它的工作!你是我的朋友的救命稻草。
标签: python tensorflow keras