我如何更改数据以使其在丢失时起作用:均方误差?

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

我正在使用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兼容?

python tensorflow keras mnist
1个回答
0
投票

我想您在这里错过了一些非常重要的内容。您试图将回归(均方误差)中使用的度量用于分类任务(预测类)。这两个目标是机器学习世界中的不同任务。

如果仍然想尝试,只需将输出层重塑为一个输出神经元并进行ReLU激活:

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

一个输出神经元和ReLU激活,因为您的标签只是0到9之间的(整数)数字。Sigmoid为您提供0到1之间的连续值,因此在这种情况下不会给您带来任何成功。

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