Auswahl aus verschiedenen Kostenfunktionen und Aktivierungsfunktionen eines neuronalen Netzes

Vor kurzem begann ich spielte mit neuronalen Netzen. Ich war versucht zu implementieren eine AND Tor mit Tensorflow. Ich habe Schwierigkeiten zu verstehen, wenn die Verwendung der verschiedenen Kosten und Aktivierung von Funktionen. Dies ist ein einfaches neuronales Netz mit nur input-und output-Schichten, keine versteckten Ebenen.

Zuerst habe ich versucht zu implementieren, die es in dieser Art und Weise. Wie Sie sehen können ist dies eine schlechte Umsetzung, aber ich denke, es bekommt den job getan, zumindest in gewisser Weise. So, ich habe versucht, nur die realen Ausgaben, nicht eine heiße true Ausgänge. Für die Aktivierung von Funktionen, die ich verwendet eine sigmoid-Funktion und für die Kosten-Funktion, die ich verwendet squared error Kosten-Funktion (ich denke, die genannt werden, korrigieren Sie mich, wenn ich falsch Liege).

Ich habe versucht, mit aufgrund der Kr und Softmax als Aktivierung von Funktionen (mit den gleichen Kosten-Funktion) und es funktioniert nicht. Ich habe herausgefunden, warum Sie nicht funktionieren. Ich habe auch versucht die sigmoid-Funktion mit Cross-Entropie-Kosten-Funktion, die es auch nicht funktioniert.

import tensorflow as tf
import numpy

train_X = numpy.asarray([[0,0],[0,1],[1,0],[1,1]])
train_Y = numpy.asarray([[0],[0],[0],[1]])

x = tf.placeholder("float",[None, 2])
y = tf.placeholder("float",[None, 1])

W = tf.Variable(tf.zeros([2, 1]))
b = tf.Variable(tf.zeros([1, 1]))

activation = tf.nn.sigmoid(tf.matmul(x, W)+b)
cost = tf.reduce_sum(tf.square(activation - y))/4
optimizer = tf.train.GradientDescentOptimizer(.1).minimize(cost)

init = tf.initialize_all_variables()

with tf.Session() as sess:
    sess.run(init)
    for i in range(5000):
        train_data = sess.run(optimizer, feed_dict={x: train_X, y: train_Y})

    result = sess.run(activation, feed_dict={x:train_X})
    print(result)

nach 5000 Iterationen:

[[ 0.0031316 ]
[ 0.12012422]
[ 0.12012422]
[ 0.85576665]]

Frage 1 - gibt es irgendeine andere Aktivierungs-Funktion und Kostenfunktion, die arbeiten können(lernen) für die über Netzwerk ohne eine änderung der Parameter(d.h. ohne Wechsel W, x, b).

Frage 2 - lese ich aus einem StackOverflow-post hier:

[Aktivierung Funktion] Auswahl hängt von dem problem.

Also gibt es keine Kosten-Funktionen, die überall eingesetzt werden kann? Ich meine, es ist keine standard Kosten-Funktion, die verwendet werden können auf einem beliebigen neuronalen Netzes. Richtig? Bitte korrigieren Sie mich, auf diese.

 

Ich auch umgesetzt AND Tor mit einem anderen Ansatz, mit dem Ausgang, als one-hot wahr. Wie Sie sehen können die train_Y [1,0] bedeutet, dass die 0. index 1, also ist die Antwort 0 ist. Ich hoffe, Sie bekommen es.

Hier habe ich eine softmax-Aktivierung, - Funktion, mit Kreuz-Entropie als Kostenfunktion. Sigmoid-Funktion als Aktivierungsfunktion scheitert kläglich.

import tensorflow as tf
import numpy

train_X = numpy.asarray([[0,0],[0,1],[1,0],[1,1]])
train_Y = numpy.asarray([[1,0],[1,0],[1,0],[0,1]])

x = tf.placeholder("float",[None, 2])
y = tf.placeholder("float",[None, 2])

W = tf.Variable(tf.zeros([2, 2]))
b = tf.Variable(tf.zeros([2]))

activation = tf.nn.softmax(tf.matmul(x, W)+b)

cost = -tf.reduce_sum(y*tf.log(activation))

optimizer = tf.train.GradientDescentOptimizer(0.5).minimize(cost)

init = tf.initialize_all_variables()

with tf.Session() as sess:
    sess.run(init)
    for i in range(5000):
        train_data = sess.run(optimizer, feed_dict={x: train_X, y: train_Y})

    result = sess.run(activation, feed_dict={x:train_X})
    print(result)

nach 5000 iteration

[[  1.00000000e+00   1.41971401e-09]
 [  9.98996437e-01   1.00352429e-03]
 [  9.98996437e-01   1.00352429e-03]
 [  1.40495342e-03   9.98595059e-01]]

Frage 3 Also in diesem Fall was Kosten, Funktion und Aktivierung der Funktion kann ich verwenden? Wie verstehe ich welche Art von Kosten und Aktivierung von Funktionen, die ich verwenden sollte? Gibt es einen standard oder eine Regel, oder einfach nur Erfahrung? Sollte ich haben, um zu versuchen, alle Kosten und Aktivierung der Funktion in einem brute-force-Manier? Ich fand die Antwort hier. Aber ich bin der Hoffnung, für eine ausführlichere Erklärung.

Frage 4 ich habe bemerkt, dass es dauert viele Iterationen konvergieren, um eine genaue Vorhersage der Nähe. Ich denke, die convergance-rate hängt von der learning rate (mit zu groß wird, verpassen die Lösung) und die Kosten-Funktion (korrigiert mich wenn ich falsch Liege). Ja, gibt es eine optimale Art und Weise (also die schnellsten) oder cost-Funktion für konvergierende zu einer richtigen Lösung?

InformationsquelleAutor der Frage Shubhashis | 2015-12-11

Schreibe einen Kommentar