【发布时间】:2021-08-06 03:19:19
【问题描述】:
这个问题与one 非常相似,并且基于 GitHub 上的this 帖子,从某种意义上说,我正在尝试将 SVM 多类分类模型(例如,使用 sklearn)转换为 Keras 模型。
具体来说,我正在寻找一种在最后检索概率(类似于 SVC probability=True)或置信度值的方法,以便我可以定义某种阈值并能够区分受过训练的类和未受过训练的类.也就是说,如果我用 3 或 4 个类训练我的模型,然后使用未训练的第 5 个,即使完全错误,它仍然会输出一些预测。我想以某种方式避免这种情况。
我得到以下工作相当不错,但它依赖于选择最后的最大值 (argmax),我想避免这种情况:
model = Sequential()
model.add(Dense(30, input_shape=(30,), activation='relu', kernel_initializer='he_uniform'))
# output classes
model.add(Dense(3, kernel_regularizer=regularizers.l2(0.1)))
# the activation is linear by default, which works; softmax makes the accuracy be stuck 33% if targeting 3 classes, or 25% if targeting 4.
#model.add(Activation('softmax'))
model.compile(loss='categorical_hinge', optimizer=keras.optimizers.Adam(lr=1e-3), metrics=['accuracy'])
关于如何解决这个未经训练的班级问题的任何想法?如果我仍然可以将模型保存为 onnx,则像 Plat scaling 或 Temperature scaling 这样的东西会起作用。
【问题讨论】:
标签: python tensorflow machine-learning keras svm