Tensorflow에 의해 숨겨진 레이어가 하나 인 간단한 신경망을 가지고 놀고 있었고 숨겨진 레이어에 대해 다른 활성화를 시도했습니다.
- 렐루
- 시그 모이 드
- Softmax (일반적으로 softmax는 마지막 레이어에서 사용됩니다.)
Relu는 최고의 열차 정확도 및 검증 정확도를 제공합니다. 이것을 설명하는 방법을 잘 모르겠습니다.
우리는 Relu가 그라디언트 사라짐과 같은 희소성과 같은 좋은 특성을 가지고 있음을 알고 있지만
Q : Relu 뉴런은 일반적으로 sigmoid / softmax 뉴런보다 낫습니까? 우리는 거의 항상 NN (또는 CNN)에서 Relu 뉴런을 사용해야합니까? 복잡한 뉴런이 오버 피팅에 대해 걱정한다면 적어도 기차 정확도가 더 나은 결과를 가져올 것이라고 생각했습니다.
PS : 감사합니다. 코드는 기본적으로 "Udacity-Machine learning -assignment2"에서 가져온 것으로 단순한 1-hidden-layer-NN을 사용하여 notMNIST를 인식합니다.
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)