【问题标题】:binary_crossentropy or categorical_crossentropybinary_crossentropy 或 categorical_crossentropy
【发布时间】:2020-07-04 16:29:17
【问题描述】:

我正在做一个有 10 个类别的多标签图像分类,我有 1981 年的数据,而标记的数据只有 1981 年的 1000 个。

我用这个配置

#begin model
model = Sequential()
model.add(Conv2D(filters=16, kernel_size=(5, 5), activation="relu", input_shape=(400,400,1)))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Conv2D(filters=32, kernel_size=(5, 5), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Conv2D(filters=64, kernel_size=(5, 5), activation="relu"))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Conv2D(filters=64, kernel_size=(5, 5), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(79, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(10, activation='sigmoid'))

model.summary()

sgd = optimizers.SGD(lr=0.001, momentum=0.9, decay=1e-6, nesterov=True)
model.compile(loss='categorical_crossentropy', optimizer=sgd, metrics=['accuracy'])

使用那个编译配置,我得到了 65% 的准确率和 nan 损失,而如果我使用 binary_crossentropy,我也只有 10% 的准确率和 nan 损失,我对这个编译配置有点困惑,其中损失我应该使用配置吗?

【问题讨论】:

    标签: python-3.x keras


    【解决方案1】:

    您必须继续使用“分类交叉熵”来解决此问题,因为目标特征包含 10 个类。

    当目标特征中只有 2 个类时,必须使用“二元交叉熵”损失函数。

    【讨论】:

    猜你喜欢
    • 2016-09-22
    • 2021-12-24
    • 2018-05-26
    • 2017-05-10
    • 2021-04-13
    • 2018-06-01
    • 2018-06-01
    • 2021-09-22
    • 2020-11-22
    相关资源
    最近更新 更多