【问题标题】:SVM as a last layer of a CNNSVM 作为 CNN 的最后一层
【发布时间】: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


【解决方案1】:

在展平层之后不需要任何层。现在使用此模型为 xtrain 提取特征向量,为 svm 提取 xtest。 参考:YouTube 频道 digitalsreeni

【讨论】:

  • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
【解决方案2】:

你能把 CNN 和 SVM 结合起来吗? 可以分享一下你的代码吗?

【讨论】:

    猜你喜欢
    • 2020-07-24
    • 2020-06-02
    • 2020-09-16
    • 2019-03-31
    • 1970-01-01
    • 2019-04-16
    • 2018-11-21
    • 2020-09-12
    • 2021-07-29
    相关资源
    最近更新 更多