【问题标题】:Is it possible to have a multiclass SVM as the last layer of a CNN using Tensorflow是否可以使用 Tensorflow 将多类 SVM 作为 CNN 的最后一层
【发布时间】:2020-07-24 06:20:26
【问题描述】:

我想使用多类 RBF SVM 作为我在 Tensorflow 中构建的 CNN 模型的最后一层。

我目前有以下内容。但不是最后一层,是否可以插入一个 SVM? 我有什么选择。 我发现 Tensorflow 有一个叫做随机傅立叶特征的东西,我可以使用内核方法来模拟 SVM?这是一个选项吗?如果是这样,我将如何将它实施到我目前拥有的东西中?

net = x_noisy_image

# 1st convolutional layer.
net = tf.layers.conv2d(inputs=net, name='layer_conv1', padding='same',
                       filters=32, kernel_size=3, activation=tf.nn.relu)
# 2nd convolutional layer.
net = tf.layers.conv2d(inputs=net, name='layer_conv2', padding='same',
                       filters=32, kernel_size=3, activation=tf.nn.relu)
# Pooling layer
net = tf.layers.max_pooling2d(inputs=net, pool_size=2, strides=2)

# 3rd convolutional layer.
net = tf.layers.conv2d(inputs=net, name='layer_conv3', padding='same',
                       filters=64, kernel_size=3, activation=tf.nn.relu)
# 4th convolution layer
net = tf.layers.conv2d(inputs=net, name='layer_conv4', padding='same',
                       filters=64, kernel_size=3, activation=tf.nn.relu)
# Pooling layer
net = tf.layers.max_pooling2d(inputs=net, pool_size=2, strides=2)

# Flatten layer.This should eventually be replaced by:
# net = tf.layers.flatten(net)
net = tf.contrib.layers.flatten(net)

# 1st fully-connected / dense layer.
net = tf.layers.dense(inputs=net, name='layer_fc1',
                      units=200, activation=tf.nn.relu)
# 2nd fully-connected / dense layer.
net = tf.layers.dense(inputs=net, name='layer_fc2',
                      units=200, activation=tf.nn.relu)
# 3rd fully-connected / dense layer.
net = tf.layers.dense(inputs=net, name='layer_fc_out',
                      units=num_classes, activation=tf.nn.softmax)



# Unscaled output of the network.
logits = net
# Softmax output of the network.
y_pred = tf.nn.softmax(logits=logits)
# Loss measure to be optimized.
cross_entropy = tf.nn.softmax_cross_entropy_with_logits_v2(labels=y_true,
                                                           logits=logits)
loss = tf.reduce_mean(cross_entropy)

"""
Optimizer for Normal Training
"""
[var.name for var in tf.trainable_variables()]
optimizer = tf.train.AdamOptimizer(learning_rate=0.0001).minimize(loss)

【问题讨论】:

    标签: tensorflow machine-learning neural-network svm


    【解决方案1】:

    我不知道多类 SVM,但我知道线性 SVM,为了做到这一点,您应该将激活更改为线性,将损失更改为铰链。检查此链接以获得澄清https://keras.io/examples/keras_recipes/quasi_svm/

    【讨论】:

      猜你喜欢
      • 2022-06-15
      • 2020-09-16
      • 2020-06-02
      • 1970-01-01
      • 1970-01-01
      • 2019-03-31
      • 2020-01-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多