Есть ли способ, который может измениться от softmax до svm в CNN? - PullRequest
0 голосов
/ 17 апреля 2019

Я работаю над CNN для классификации изображений. Я реализовал CNN с сетью Softmax, как показано ниже, но я хочу изменить этот код на CNN с SVM. Может ли кто-нибудь помочь мне решить мою проблему?

def _build_net(self):

    with tf.device('/gpu:0'):
        # Convolutional Layer #3 and Pooling Layer #3
        conv3 = tf.layers.conv2d(inputs=dropout2, filters=64, kernel_size=[3, 3], padding="SAME", activation=tf.nn.relu,  kernel_initializer=tf.contrib.layers.xavier_initializer())
        print('conv3:' + str(conv3))
        pool3 = tf.layers.max_pooling2d(inputs=conv3, pool_size=[2, 2], padding="SAME", strides=2)
        print('pool3:' + str(pool3))
        dropout3 = tf.layers.dropout(inputs=pool3, rate=0.6, training=self.training)
        print('dropout3:' + str(dropout3))

    with tf.device('/gpu:1'):
        # Dense Layer with Relu
        flat = tf.reshape(dropout3, [-1, 16*16*64]) # flat should be same with size of last dropout
        print('flat:' + str(flat))
        dense = tf.layers.dense(inputs=flat, units=1024, activation=tf.nn.relu)
        print('dense:' + str(dense))
        dropout_dense = tf.layers.dropout(inputs=dense, rate=0.6, training=self.training)
        print('dropout_dense:' + str(dropout_dense))

        self.logits = tf.layers.dense(inputs=dropout_dense, units=n_classes)
        print('logits:' + str(self.logits))

    # define cost/loss & optimizer
    self.cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits_v2(logits=self.logits, labels=self.Y))
    print('cost:' + str(self.cost))
    self.optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(self.cost)
    print('optimizer:' + str(self.optimizer))

    correct_prediction = tf.equal(tf.argmax(self.logits, 1), tf.argmax(self.Y, 1))
    print('correct_prediction:' + str(correct_prediction))
    self.accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
    print('accuracy:' + str(self.accuracy))

def predict(self, x_test, training=False):
    return self.sess.run(self.logits, feed_dict={self.X: x_test, self.training: training})

def get_accuracy(self, x_test, y_test, training=False):
    return self.sess.run(self.accuracy, feed_dict={self.X: x_test, self.Y: y_test, self.training: training})

def train(self, x_data, y_data, training=True):
    return self.sess.run([self.cost, self.optimizer], feed_dict={self.X: x_data, self.Y: y_data, self.training: training})
...