Das Optimierungsprogramm wird nicht die Ausgabe ändern, die tatsächlich von den Schichten gegeben.
Das angegebene Beispiel verwendet ReLu für die Layer, was gut für die Klassifizierung ist, aber um die Wahrscheinlichkeit zu modellieren, dass es nicht funktionieren würde. Sie wären besser mit einer Sigmoid-Funktion stattdessen.
Die Sigmoidfunktion kann zur Modellierung der Wahrscheinlichkeit verwendet werden, während ReLu zur Modellierung positiver reeller Zahlen verwendet werden kann.
def multilayer_perceptron(_X, _weights, _biases):
layer_1 = tf.sigmoid(tf.add(tf.matmul(_X, _weights['h1']), _biases['b1']), name="sigmoid_l1") #Hidden layer with sigmoid activation
layer_2 = tf.sigmoid(tf.add(tf.matmul(layer_1, _weights['h2']), _biases['b2']), name="sigmoid_l2") #Hidden layer with sigmoid activation
return tf.matmul(layer_2, _weights['out'], name="matmul_lout") + _biases['out']
Es ersetzt im Wesentlichen der relu Aktivierung für eine S-förmige eines: zu
Um es für das vorgesehene Beispiel arbeiten zu lassen, die multilayer_perceptron Funktion zu ändern.
Dann wird für die Auswertung verwenden softmax wie folgt:
output1 = tf.nn.softmax((multilayer_perceptron(x, weights, biases)), name="output")
avd = sess.run(output1, feed_dict={x: features_t})
Es Sie bieten eine breite Palette zwischen 0 und 1 für jede Klasse. Außerdem müssen Sie wahrscheinlich die Anzahl der Epochen erhöhen, damit dies funktioniert.