Точность тестирования сети Tensorflow не улучшилась на CIFAR 10

Я новичок в Tensorflow. Прямо сейчас я пытаюсь создать простую четырехуровневую полностью подключенную нейронную сеть для классификации набора данных CIFAR-10. Однако в моем тестовом наборе точность нейронной сети на тестовом наборе полностью статична и застряла на уровне 11%.

Я знаю, что полностью подключенная нейронная сеть, вероятно, не идеальна для этой задачи, но странно, что сеть вообще не улучшается / не меняется. Поэтому мне было интересно, знает ли кто-нибудь решение моей проблемы. Я скопировал свой код ниже, любая помощь приветствуется! Большое Вам спасибо.

import tensorflow as tf 
import numpy as np

(x_train, y_train), (x_test, y_test) = tf.keras.datasets.cifar10.load_data()

y_train_one_hot = np.zeros((y_train.shape[0], 10))
for i in range(y_train.shape[0]):
    y_train_one_hot[i][y_train[i]] = 1

y_test_one_hot = np.zeros((y_test.shape[0], 10))
for i in range(y_test.shape[0]):
    y_test_one_hot[i][y_test[i]] = 1


x = tf.placeholder(dtype=tf.float32, shape=(None, 32, 32, 3), name='X')
y = tf.placeholder(dtype=tf.float32, shape=(None, 10), name='Y')
keep_prob = tf.placeholder(tf.float32)

x_flatten = tf.reshape(x, [-1, 32*32*3])
nn = tf.layers.dense(x_flatten, 1028, activation=tf.nn.relu)
nn = tf.nn.dropout(nn, keep_prob)
nn = tf.layers.dense(nn, 1028, activation=tf.nn.relu)
nn = tf.nn.dropout(nn, keep_prob)
nn = tf.layers.dense(nn, 512, activation=tf.nn.relu)
nn = tf.nn.dropout(nn, keep_prob)
prediction = tf.layers.dense(nn, 10, activation=tf.nn.relu)

cross_entropy = tf.losses.softmax_cross_entropy(onehot_labels=y, logits=prediction)
loss = tf.reduce_mean(cross_entropy)
train_step = tf.train.AdamOptimizer().minimize(loss)

correct_prediction = tf.equal(tf.argmax(prediction, 1), tf.argmax(y, 1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))

init = tf.global_variables_initializer()

with tf.Session() as sess:
    sess.run(init)

    for iteration in range(1000):
        sess.run(train_step, feed_dict = {x: x_train[:1000], y: y_train_one_hot[:1000], keep_prob: 0.5})
        if iteration % 10 == 0:
            acc = sess.run(accuracy, feed_dict = {x: x_test[:100], y: y_test_one_hot[:100], keep_prob: 1.0})
            print(acc)

Вы применяете softmax два раза, один раз в последнем слое и еще раз в softmax_cross_entropy.

Dr. Snoopy 23.11.2018 15:13

Привет, Матиас, спасибо за ответ! Принято к сведению, но после того, как я изменил активацию уровня прогнозирования на relu, моя точность теста все еще остается на уровне 10% ....

Danny 23.11.2018 23:06

Попробуйте сделать так, чтобы ваш AdamOptimizer минимизировал cross_entropy вместо loss. Кроме того, в своем коде я обнаружил, что делаю 500 000 проходов вместо 1000. Вот как я к этому подхожу

watersnake 23.11.2018 23:21

@watersnake Понятно, спасибо! Просто интересно, какова была ваша точность на тестовом наборе?

Danny 24.11.2018 02:24

Я получал что-то вроде 70-75%. В книге сказано, что я должен получить ~ 83%, но я этого не делаю. В моем коде может быть ошибка, так как 75% - это норма для 2 сверточных слоев, но добавление 3-го должно было увеличить ее. Я тоже новичок в этом. Обновлено: Это был не просто 3-й уровень, а еще одна сложность модели. 75% должно быть хорошо.

watersnake 24.11.2018 03:14
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
5
124
0

Другие вопросы по теме