分类神经网络不收敛

问题描述 投票:0回答:1

我为 MNIST 开发了一个基本的分类网络,但在训练过程中,验证准确率 tr,目标是 10% 左右。我尝试过各种优化器(SGD、Adam、Nadam)以及不同的学习率(0.1、1e-3、1e-4、1e-5),但每个时期的验证准确度都保持在 10% 左右。

这是我的代码:

import tensorflow as tf
from tensorflow import keras

(X_train, y_train), (X_test, y_test) = keras.datasets.mnist.load_data()
X_train, X_val = X_train[5000:]/255.0, X_train[:5000]/255.0
y_train, y_val = y_train[5000:]/255.0, y_train[:5000]/255.0

class_NN = keras.models.Sequential([
    keras.layers.Input(shape = [28, 28]),
    keras.layers.Flatten(),
    keras.layers.Dense(300, activation = "relu"),
    keras.layers.Dense(100, activation = "relu"),
    keras.layers.Dense(10, activation = "softmax")
])

class_NN.compile(loss = "sparse_categorical_crossentropy",
                 optimizer = keras.optimizers.SGD(learning_rate = 1e-3), 
                 metrics = ["accuracy"])
class_NN.fit(X_train, y_train, epochs = 15,
             validation_data = (X_val, y_val))

我在写这个问题的时候,在开始训练之前从代码中取出了

/255.0
。目前,随着我们的训练,验证的准确性正在提高。我的验证准确率达到了 96% 左右。去掉
/255.0
后,是什么导致训练时验证准确率提高了?

X_train, X_val = X_train[5000:], X_train[:5000]
y_train, y_val = y_train[5000:], y_train[:5000]
python machine-learning keras neural-network mnist
1个回答
0
投票

您不需要按照您的方式标准化您的目标值。将 0 到 9 范围内的目标值除以 255.0 是没有意义的。 更改此行:

y_train, y_val = y_train[5000:]/255.0, y_train[:5000]/255.0

y_train, y_val = y_train[5000:], y_train[:5000]

© www.soinside.com 2019 - 2024. All rights reserved.