我一直在關注吳教授的講座,並試圖在我的jupyter筆記本上使用tensorflow實現SVM。但是,我的模型似乎沒有正確收斂。支持向量機Tensorflow的實現
我想我有錯的損失函數,並且最終可能會不恰當地適合我的模型。
而且下面是我的模型的全圖構建代碼:
tf.reset_default_graph()
#training hyper parameters
learning_rate = 0.000001
C = 20
gamma = 50
X = tf.placeholder(tf.float32, shape=(None,2))
Y = tf.placeholder(tf.float32, shape=(None,1))
landmark = tf.placeholder(tf.float32, shape=(None,2))
W = tf.Variable(np.random.random((num_data)),dtype=tf.float32)
B = tf.Variable(np.random.random((1)),dtype=tf.float32)
batch_size = tf.shape(X)[0]
#RBF Kernel
tile = tf.tile(X, (1,num_data))
diff = tf.reshape(tile, (-1, num_data, 2)) - landmark
tile_shape = tf.shape(diff)
sq_diff = tf.square(diff)
sq_dist = tf.reduce_sum(sq_diff, axis=2)
F = tf.exp(tf.negative(sq_dist * gamma))
WF = tf.reduce_sum(W * F, axis=1) + B
condition = tf.greater_equal(WF, 0)
H = tf.where(condition, tf.ones_like(WF),tf.zeros_like(WF))
ERROR_LOSS = C * tf.reduce_sum(Y * tf.maximum(0.,1-WF) + (1-Y) * tf.maximum(0.,1+WF))
WEIGHT_LOSS = tf.reduce_sum(tf.square(W))/2
TOTAL_LOSS = ERROR_LOSS + WEIGHT_LOSS
optimizer = tf.train.GradientDescentOptimizer(learning_rate)
train = optimizer.minimize(TOTAL_LOSS)
我使用高斯核和餵養整個訓練設置爲地標。
只要我有正確的實施,損失函數是完全相同的演講中顯示。
我敢肯定,我失去了一些東西。
感謝您的回答!我需要開始檢查講義。 – goofcode
很高興幫助,希望你找到有用的筆記。有時他們可能很密集,但他們寫得很好 –