Почему нормализация изображений MNIST снижает точность? - PullRequest
0 голосов
/ 10 марта 2020

Я использую базовый c NN для обучения и проверки точности на наборе данных MNIST.

Система: i5 8th Gen, GPU - Nvidia 1050Ti

Вот мой код:

from __future__ import print_function,absolute_import,unicode_literals,division
import tensorflow as tf

mnist = tf.keras.datasets.mnist

(x_train,y_train) , (x_test,y_test) = mnist.load_data()
#x_train , y_train = x_train/255.0 , y_train/255.0

model = tf.keras.models.Sequential([
tf.keras.layers.Flatten(input_shape=(28,28)),
tf.keras.layers.Dense(312,activation='relu'),
tf.keras.layers.Dropout(0.3),
tf.keras.layers.Dense(10,activation='softmax')
])

model.compile(
optimizer='Adamax',
loss="sparse_categorical_crossentropy",
metrics=['accuracy']
)
model.fit(x_train,y_train,epochs=5)
model.evaluate(x_test,y_test)

Когда я нормализую изображения, как в 5-й строке, точность падает ужасно:

loss: 10392.0626 - accuracy: 0.0980

Однако, когда я не нормализую их, это дает:

- loss: 0.2409 - accuracy: 0.9420

В целом, нормализация данных помогает градиентному спуску сходиться быстрее. Почему эта огромная разница? Чего мне не хватает?

Ответы [ 2 ]

2 голосов
/ 10 марта 2020

Используйте это:

(x_train, y_train) , (x_test,y_test) = mnist.load_data()
x_train , x_test = x_train/255.0 , x_test/255.0

Вы делите свои метки на 255, поэтому вы не нормализуетесь должным образом.

0 голосов
/ 10 марта 2020

Необходимо выполнить одинаковую нормализацию на тренировочном наборе и тестовом наборе Если вы используете предварительно обученную сеть, вы должны выполнить ту же нормализацию, что и тренер; здесь вам не хватает нормализации тестового набора.

x_train = x_train/255.0
x_test = x_test/255.0 

Не за что.

...