【发布时间】:2022-06-15 14:22:24
【问题描述】:
我是社区的新手,我正在尝试尽可能多地学习,但我到了需要帮助的地步,因为我无法找到正确的解决方案。
我有一个最后带有 softmax 层的 CNN,但我想要一个 SVM,但我真的不知道该怎么做。我在网上找到了一句话,基本上,我必须从softmax改为linear,但我不明白为什么,因为我不明白我不能这样做。
如果有人知道怎么做,请告诉我如何使用下面的代码来做?如果之前有人问过这个问题,或者您觉得它不那么聪明,谢谢并抱歉。我是新手。
代码如下:
model = keras.models.Sequential([
keras.layers.Conv2D(filters=16, kernel_size=(3,3), activation='relu', input_shape=(IMG_HEIGHT,IMG_WIDTH,channels)),
keras.layers.Conv2D(filters=32, kernel_size=(3,3), activation='relu'),
keras.layers.MaxPool2D(pool_size=(2, 2)),
keras.layers.BatchNormalization(axis=-1),
keras.layers.Conv2D(filters=64, kernel_size=(3,3), activation='relu'),
keras.layers.Conv2D(filters=128, kernel_size=(3,3), activation='relu'),
keras.layers.MaxPool2D(pool_size=(2, 2)),
keras.layers.BatchNormalization(axis=-1),
keras.layers.Flatten(),
keras.layers.Dense(512, activation='relu'),
keras.layers.BatchNormalization(),
keras.layers.Dropout(rate=0.5),
keras.layers.Dense(43, activation='softmax')
])
【问题讨论】:
-
您可以从预训练的神经网络中提取 2D 特征表示,并将它们用作 SVM(迁移学习)的输入
-
也许我没有解释自己。我的问题是如何将 SVM 作为最后一层
-
根本不可能
-
所以有了上面的短语,我想做以下事情。提取特征并将它们用作我的 SVM 的输入,而不是继续使用 CNN 并将输入提供给完全连接的神经网络。这是可能的,因为你已经建议了。我的问题是一旦我提取了不难的功能,因为我已经这样做了。如何构建 SVM 以链接我的功能?这是我想知道的。
-
一旦你提取了特征,你可以简单地调用 my_svm.fit(my_extracted_feat, y) ,就像任何标准的 svm 模型拟合一样。只注意提取 2D 特征以便在 sklearn 模型中使用
标签: machine-learning keras conv-neural-network artificial-intelligence svm