Ich möchte weights
und exponents
für ein individuelles Modell optimal lernen, die ich angelegt habe:TensorFlow Custom Model Optimizer, der NaN zurückgibt. Warum?
weights = tf.Variable(tf.zeros([t.num_features, 1], dtype=tf.float64))
exponents = tf.Variable(tf.ones([t.num_features, 1], dtype=tf.float64))
# works fine:
pred = tf.matmul(x, weights)
# doesn't work:
x_to_exponent = tf.mul(tf.sign(x), tf.pow(tf.abs(x), tf.transpose(exponents)))
pred = tf.matmul(x_to_exponent, weights)
cost_function = tf.reduce_mean(tf.abs(pred-y_))
optimizer = tf.train.GradientDescentOptimizer(t.LEARNING_RATE).minimize(cost_function)
Das Problem, das ist, wenn es einen negativen Wert Null in x
ist der Optimierer das Gewicht als NaN
zurückgibt. Wenn ich einfach 0,0001 addiere, wenn x = 0, dann funktioniert alles wie erwartet. Aber sollte ich das wirklich tun müssen? Sollte der TensorFlow-Optimierer damit nicht umgehen können?
Ich habe festgestellt, Wikipedia zeigt keine activation functions, wo x zu einem Exponenten genommen wird. Warum gibt es keine Aktivierungsfunktion, die wie folgt aussieht?
Für das obige Bild möchte ich, dass mein Programm lernt, dass der korrekte Exponent 0,5 ist.
Sind Sie sicher, dass Sie wollen, dass Gewichte ein ** Exponent ** sind? Dies kann leicht in die Infinity gehen. Bitte geben Sie auch Ihren vollständigen Code an. – lejlot
Ja - Ich möchte herausfinden, welchen Exponenten ich für meine Eingabedaten verwenden muss, um die richtigen Vorhersagen treffen zu können. Der Exponent wird normalerweise zwischen 0-1 liegen und sollte nicht in die Unendlichkeit gehen. Zum Beispiel, wenn das obige Bild das Modell war, versuchen wir den korrekten Exponenten vorherzusagen, den wir lernen müssen, ist 0,5. –
@lejlot Ich habe den Code aktualisiert, um klarer zu zeigen, was funktioniert und was nicht funktioniert. Es gab auch einen Fehler, den ich korrigiert habe. –