Как я могу изменить свои данные, чтобы они работали с потерями: среднеквадратическая ошибка? - PullRequest
0 голосов
/ 27 октября 2019

Я использую набор данных mnist (цифры) и хотел бы реализовать функцию потери среднего квадрата ошибок, однако у меня есть следующая ошибка:

ValueError: Целевой массив с формой (60000, 1) былпередается для вывода формы (Нет, 10) при использовании в качестве потери mean_squared_error. Эта потеря предполагает, что цели будут иметь ту же форму, что и выходные данные.

это мой код: Первоначально я пытался sparse_categorical_crossentropy Код изменен с: https://www.youtube.com/watch?v=wQ8BIBpya2k

import tensorflow as tf

mnist = tf.keras.datasets.mnist

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

x_train = tf.keras.utils.normalize(x_train, axis = 1) 
x_test = tf.keras.utils.normalize(x_test, axis = 1) 

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

model.compile(optimizer='SGD',
              loss='mean_squared_error',
              metrics=['accuracy'])

model.fit(x_train, y_train, epochs=3)

Как я могу изменить свои данные, чтобы они работали с MSE?

1 Ответ

0 голосов
/ 27 октября 2019

Полагаю, вы упустили что-то очень важное здесь. Вы пытаетесь использовать метрику, используемую в регрессии (Mean-Squared-Error) для задачи классификация (прогнозирование классов). Эти две цели - разные задачи в мире машинного обучения.

Если вы все равно хотите попробовать, просто измените свой последний слой на один выходной нейрон и активацию ReLU:

tf.keras.layers.Dense(1, activation='relu')

Oneвыходной нейрон и ReLU-активация, поскольку ваша метка - это просто (целые) числа от 0 до 9. Сигмоид дает вам непрерывные значения от 0 до 1, поэтому в этом случае это не принесет вам никакого успеха.

Имейте в виду, что ваша модель больше не выполняет классификацию, она даст вам непрерывное число от 0 до inf. Так что не удивляйтесь, если вы получите, например, 3.1415 в качестве вывода, если вы подадите изображение 3 в вашу модель. Теперь модель пытается создать выходные данные, максимально приближенные к числу в метке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...