Я пытаюсь создать очень простую нейронную сеть, считывающую информацию с формой 1x2048
, и создать классификацию для двух категорий (объект или не объект). Однако структура графа отличается от того, что я считаю закодированным. Плотные слои должны быть включены в область «inner_layer» и должны получать входные данные из заполнителя «input». Вместо этого TF, кажется, рассматривает их как независимые уровни, которые не получают никакой информации от «входа».
Кроме того, при попытке использовать сводки тензорной доски я получаю сообщение об ошибке, говорящее мне, что я не упомянул о вставке входных данных для очевидных заполнителей плотных слоев. Если не использовать tensorboard, все работает так, как я и ожидал, судя по коду.
Я потратил много времени, пытаясь найти проблему, но я думаю, что должен упускать из виду что-то очень простое.
График, который я получаю в tensorboard, находится на этом изображении.
Что соответствует следующему коду:
tf.reset_default_graph()
keep_prob = 0.5
# Graph Strcuture
## Placeholders for input
with tf.name_scope('input'):
x_ = tf.placeholder(tf.float32, shape = [None, transfer_values_train.shape[1]], name = "input1")
y_ = tf.placeholder(tf.float32, shape = [None, num_classes], name = "labels")
## Dense Layer one with 2048 nodes
with tf.name_scope('inner_layers'):
first_layer = tf.layers.dense(x_, units = 2048, activation=tf.nn.relu, name = "first_dense")
dropout_layer = tf.nn.dropout(first_layer, keep_prob, name = "dropout_layer")
#readout layer, without softmax
y_conv = tf.layers.dense(dropout_layer, units = 2, activation=tf.nn.relu, name = "second_dense")
# Evaluation and training
with tf.name_scope('cross_entropy'):
cross_entropy = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits_v2(labels = y_ , logits = y_conv),
name = "cross_entropy_layer")
with tf.name_scope('trainer'):
train_step = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy)
with tf.name_scope('accuracy'):
prediction = tf.argmax(y_conv, axis = 1)
correct_prediction = tf.equal(prediction, tf.argmax(y_, axis = 1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
Кто-нибудь знает, почему график так отличается от того, что вы ожидаете, основываясь на коде?