gpt4 book ai didi

python - Keras MNIST 目标向量自动转换为 one-hot?

转载 作者:行者123 更新时间:2023-12-03 23:06:19 24 4
gpt4 key购买 nike

当我加载 mnist来自 Keras 的数据集,我得到 4 个变量 -

(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()
x_train的形状是 (60000, 28, 28) ,这是有道理的,因为它包含 60,000 张 28x28 图片 y_train的形状只是 (60000,)这表明它是一个包含数字目标标签 (0-9) 的一维向量。
为了运行数字分类,神经网络通常输出一个单热编码的向量,它有十个维度。我以为我需要使用 to_categorical将 y 目标从数值型转换为分类型,以使神经网络的形状输出与训练样本相匹配,大概是 (60000, 10) .
但在我在网上找到的几个例子中, to_categorical从未用于 reshape 训练向量。 y_train.shape剩余 (60000,)而神经网络的输出层是
 model.add(Dense(10, activation="softmax"))
它输出一个 10-D one-hot 向量。
然后他们简单地在 y_train 上训练模型没有问题
model.fit(x_train, y_train, epochs=2, validation_data=(x_test, y_test))
这怎么可能?神经网络的输出不是 (60000, 10) 的形状吗?与 (60000,) 不兼容?还是 Keras 会自动将分类输出转换为数字?
编辑:更明确地说,我知道如何对其进行单热编码,但我的问题是他们为什么不这样做。在这个例子中,网络在没有对目标类进行单热编码的情况下工作,而网络的输出显然是单热编码的。
编辑:罗欣是对的。这只是使用 sparse_crossentropy 的效果损失,而不是分类。

最佳答案

将损失函数更改为

loss = 'sparse_categorical_crossentropy'
这将起作用,并且您不必更改输入数据形状

关于python - Keras MNIST 目标向量自动转换为 one-hot?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62491097/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com