我正在使用mnist数据集(数字),并且想要实现均方误差损失函数,但是我遇到以下错误:
ValueError:传递形状为(60000,1)的目标数组以输出形状为(None,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兼容?
我想您在这里错过了一些非常重要的内容。您试图将回归(均方误差)中使用的度量用于分类任务(预测类)。这两个目标是机器学习世界中的不同任务。
如果仍然想尝试,只需将输出层重塑为一个输出神经元并进行ReLU激活:
tf.keras.layers.Dense(1, activation='relu')
一个输出神经元和ReLU激活,因为您的标签只是0到9之间的(整数)数字。Sigmoid为您提供0到1之间的连续值,因此在这种情况下不会给您带来任何成功。