我如何更改我的数据以使其在损失的情况下工作:均方误差



我正在使用mnist数据集(数字(,并希望实现均方误差损失函数,但我有以下错误:

ValueError:在使用作为损失mean_squared_error时,为形状为(None,10(的输出传递了形状为(60000,1(的目标数组。这种损失预计目标的形状与产出相同。

这是我的代码:最初,我尝试了spare_categorical_crossentry代码修改自: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之间的连续值,因此在这种情况下,这不会给您带来任何成功。

请记住,你的模型不再进行分类,它会给你一个0到inf之间的连续数字。因此,如果你在模型中输入3的图像,你会得到3.1415作为输出,不要感到惊讶。该模型现在尝试生成尽可能接近标签中数字的输出。

最新更新