Stavo giocando con una semplice rete neurale con un solo livello nascosto, di Tensorflow, e poi ho provato diverse attivazioni per il livello nascosto:
- Relu
- sigmoid
- Softmax (beh, di solito softmax è usato nell'ultimo strato ..)
Relu offre la migliore precisione e accuratezza di convalida del treno. Non sono sicuro di come spiegarlo.
Sappiamo che Relu ha buone qualità, come la scarsità, come la sparizione senza gradiente, ecc., Ma
D: Il neurone Relu è generalmente migliore dei neuroni sigmoidi / softmax? Dovremmo quasi sempre usare i neuroni Relu nella NN (o anche nella CNN)? Pensavo che un neurone più complesso avrebbe introdotto risultati migliori, almeno allenando l'accuratezza se ci preoccupiamo di un eccesso di adattamento.
Grazie PS: il codice deriva essenzialmente da "Udacity-Machine learning -assignment2", che è il riconoscimento di notMNIST usando un semplice NN a 1 strato nascosto.
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)