为什么规范化 MNIST 图像会降低准确性?
Why does normalizing MNIST images reduce accuracy?
我正在使用基本神经网络来训练和测试 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
一般来说,归一化数据有助于梯度下降更快地收敛。为什么会有如此巨大的差异?
我错过了什么?
您需要对训练集和测试集进行相同的归一化。
如果您使用预训练网络,您应该进行与训练者相同的归一化;这里你缺少规范化测试集。
x_train = x_train/255.0
x_test = x_test/255.0
不客气。
使用这个:
(x_train, y_train) , (x_test,y_test) = mnist.load_data()
x_train , x_test = x_train/255.0 , x_test/255.0
您将标签除以 255,因此您没有正确规范化。
我正在使用基本神经网络来训练和测试 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
一般来说,归一化数据有助于梯度下降更快地收敛。为什么会有如此巨大的差异? 我错过了什么?
您需要对训练集和测试集进行相同的归一化。 如果您使用预训练网络,您应该进行与训练者相同的归一化;这里你缺少规范化测试集。
x_train = x_train/255.0
x_test = x_test/255.0
不客气。
使用这个:
(x_train, y_train) , (x_test,y_test) = mnist.load_data()
x_train , x_test = x_train/255.0 , x_test/255.0
您将标签除以 255,因此您没有正确规范化。