Ich habe den Vortrag von Prof. Ng verfolgt und versucht, SVM auf meinem Jupyter Notebook mit Tensorflow zu implementieren. Mein Modell scheint jedoch nicht korrekt konvergiert zu sein.SVM Tensorflow Implementierung
Ich glaube, ich falsch Verlustfunktion haben und das könnte passen würde mein Modell nicht ordnungsgemäß beenden.
Und unten ist voll Graph Bauordnung meines Modells:
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)
Ich Gaußschen Kernel verwenden und ganze Ausbildung als Wahrzeichen gesetzt füttern.
Und die Verlustfunktion ist genau die gleiche, die in der Vorlesung gezeigt wird, solange ich die richtige Implementierung darauf habe.
Ich bin mir ziemlich sicher, dass ich etwas fehle.
Schätzen Sie für die Beantwortung! Ich muss anfangen, die Vorlesungsunterlagen zu lesen. – goofcode
Ich bin froh zu helfen, hoffe, Sie finden die Notizen nützlich. Sie können manchmal dicht sein, aber sie sind sehr gut geschrieben –