Обучающая модель MNIST с правильными гиперпараметрами в Python - PullRequest
0 голосов
/ 15 апреля 2020

вот мой код, я не знаю, почему он дает мне 0,3% точности

Может кто-нибудь сказать мне, в чем проблема с этим кодом?

def train_mnist():

    mnist = tf.keras.datasets.mnist

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

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

    model.compile(optimizer='adam',
                  loss='sparse_categorical_crossentropy',
                  metrics=['accuracy'])


    history = model.fit(x_train, y_train, epochs=5)

    return history.epoch, history.history['acc'][-1]

train_mnist()

спасибо в Adavnce

Ответы [ 2 ]

1 голос
/ 15 апреля 2020

Проблема, похоже, заключается в вашей функции потерь

Попробуйте:

Метод 1

Вы можете использовать categorical_crossentropy в качестве потери, но последний слой должен быть

tf.keras.layers.Dense(10,activation='softmax')

, а затем

model.compile(optimizer = 'adam', 
              loss"categorical_crossentropy", 
              metrics=["accuracy"])

Метод 2

В вашем случае для потери sparse_categorical_crossentropy необходимо определить

tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True,name='sparse_categorical_crossentropy')

Чтобы понять разницу между этими двумя, см. this

1 голос
/ 15 апреля 2020

это будет работать! попробуйте это

loss_fn = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True)


model.compile(optimizer='adam',
              loss=loss_fn,
              metrics=['accuracy'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...