Ich habe mit einem einfachen neuronalen Netzwerk mit nur einer ausgeblendeten Ebene von Tensorflow gespielt und dann verschiedene Aktivierungen für die ausgeblendete Ebene ausprobiert:
- Relu
- Sigmoid
- Softmax (na ja, normalerweise wird Softmax in der letzten Schicht verwendet.)
Relu bietet die beste Zuggenauigkeit und Validierungsgenauigkeit. Ich bin mir nicht sicher, wie ich das erklären soll.
Wir wissen, dass Relu gute Eigenschaften wie Sparsamkeit hat, wie kein Gradienten-Verschwinden, etc, aber
F: Ist das Relu-Neuron im Allgemeinen besser als Sigmoid / Softmax-Neuronen? Sollten wir fast immer Relu-Neuronen in NN (oder sogar CNN) verwenden? Ich dachte, ein komplexeres Neuron würde ein besseres Ergebnis bringen, zumindest die Genauigkeit des Trainings, wenn wir uns Sorgen über eine Überanpassung machen.
Danke PS: Der Code stammt im Wesentlichen aus "Udacity-Machine Learning-Assignment2", was die Erkennung von notMNIST mit einem einfachen 1-Hidden-Layer-NN bedeutet.
batch_size = 128
graph = tf.Graph()
with graph.as_default():
# Input data.
tf_train_dataset = tf.placeholder(tf.float32, shape=(batch_size, image_size * image_size))
tf_train_labels = tf.placeholder(tf.float32, shape=(batch_size, num_labels))
tf_valid_dataset = tf.constant(valid_dataset)
tf_test_dataset = tf.constant(test_dataset)
# hidden layer
hidden_nodes = 1024
hidden_weights = tf.Variable( tf.truncated_normal([image_size * image_size, hidden_nodes]) )
hidden_biases = tf.Variable( tf.zeros([hidden_nodes]))
hidden_layer = **tf.nn.relu**( tf.matmul( tf_train_dataset, hidden_weights) + hidden_biases)
# Variables.
weights = tf.Variable( tf.truncated_normal([hidden_nodes, num_labels]))
biases = tf.Variable(tf.zeros([num_labels]))
# Training computation.
logits = tf.matmul(hidden_layer, weights) + biases
loss = tf.reduce_mean( tf.nn.softmax_cross_entropy_with_logits(logits, tf_train_labels) )
# Optimizer.
optimizer = tf.train.GradientDescentOptimizer(0.5).minimize(loss)
# Predictions for the training, validation, and test data.
train_prediction = tf.nn.softmax(logits)
valid_relu = **tf.nn.relu**( tf.matmul(tf_valid_dataset, hidden_weights) + hidden_biases)
valid_prediction = tf.nn.softmax( tf.matmul(valid_relu, weights) + biases)
test_relu = **tf.nn.relu**( tf.matmul( tf_test_dataset, hidden_weights) + hidden_biases)
test_prediction = tf.nn.softmax(tf.matmul(test_relu, weights) + biases)