gpt4 book ai didi

tensorflow - 在大量类别上训练分类器时,SVM 非常慢

转载 作者:行者123 更新时间:2023-11-30 08:51:56 24 4
gpt4 key购买 nike

我正在尝试在大量项目和类上训练 SVM 分类器,这变得非常非常慢。

首先,我从数据中提取了一个特征集,具体来说是 512 个特征,并将其放入 numpy 数组中。该数组中有 13k 个项目。看起来像这样:

>>print(type(X_train))
<class 'numpy.ndarray'>

>>print(X_train)
[[ 0.01988654 -0.02607637 0.04691431 ... 0.11521499 0.03433102
0.01791015]
[-0.00058317 0.05720023 0.03854145 ... 0.07057668 0.09192026
0.01479562]
[ 0.01506544 0.05616265 0.01514515 ... 0.04981219 0.05810429
0.00232013]
...

此外,还有大约 4k 个不同的类:

>> print(type(labels))
<class 'list'>
>> print(labels)
[0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 3, 3, 4, 4, 4, 4, 5, 5, ... ]

这是分类器:

import pickle
from thundersvmScikit import SVC

FILENAME = 'dataset.pickle'

with open(FILENAME, 'rb') as infile:
(X_train, labels) = pickle.load(infile)

clf = SVC(kernel='linear', probability=True)
clf.fit(X_train, labels)

大约 90 小时过去后(我正在以 Thundersvm 的形式使用 sci-learn 套件的 GPU 实现),拟合操作仍在运行。考虑到在我的情况下这是一个相当小的数据集,我肯定需要更有效的东西,但我似乎没有取得任何成功。例如,我尝试过这种类型的 Keras 模型:

model = Sequential()
model.add(Dense(input_dim=512, units=100, activation='tanh'))
model.add(Dropout(0.2))
model.add(Dense(units=n_classes, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adadelta', metrics=['accuracy'])
model.fit(X_train, labels, epochs=500, batch_size=64, validation_split=0.1, shuffle=True)

我在训练阶段最终获得了相当好的准确性:

Epoch 500/500
11988/11988 [==============================] - 1s 111us/step - loss: 2.1398 - acc: 0.8972 - val_loss: 9.5077 - val_acc: 0.0000e+00

但是,在实际测试期间,即使是针对训练数据集中存在的数据,我的准确度也极低,基本上预测的是随机类别:

Predictions (best probabilities):
0 class710015: 0.008
1 class715573: 0.007
2 class726619: 0.006
3 class726619: 0.010
4 class720439: 0.007
Accuracy: 0.000

您能帮我指出正确的方向吗?我应该以某种方式调整 SVM 方法还是应该针对此类问题切换到自定义 Keras 模型?如果是,我的模型可能存在什么问题?

非常感谢。

最佳答案

如果该 SVC 实现依赖于多类 SVC 的 scikit-learn 实现,则不应使用该 SVC 实现。在 documentation它指出“多类别支持是根据一对一方案处理的。”这意味着您为每一对类训练一个分类器,即正在训练 ~ 2^4k 个分类器。您可以使用 here 列出的任何内容在“本质上多类”下

此外,您的 Keras 实现可能还需要另一层。我假设输出层每个类有 1 个神经元,在这种情况下,您需要使用分类交叉熵和 softmax 激活,以及一种热编码。

我现在假设您的所有示例都只有一个类标签。

关于tensorflow - 在大量类别上训练分类器时,SVM 非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54522208/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com