是否可以使用Tensorflow将多类SVM作为CNN的最后一层



我想使用多类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)

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

最新更新