Я работаю над 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})