gpt4 book ai didi

python - 理解 softmax 输出层的目标数据

转载 作者:行者123 更新时间:2023-12-04 10:30:11 26 4
gpt4 key购买 nike

我找到了一些 MNIST 手写字符分类问题的示例代码。代码开头如下:

import tensorflow as tf

# Load in the data
mnist = tf.keras.datasets.mnist

(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0
print("x_train.shape:", x_train.shape)

model = tf.keras.models.Sequential([
tf.keras.layers.Flatten(input_shape=(28, 28)),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dropout(0.2),
tf.keras.layers.Dense(10, activation='softmax')
])
# Compile the model
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
# Train the model
r = model.fit(x_train, y_train, validation_data=(x_test, y_test), epochs=10)

查看代码似乎网络的输出层由十个节点组成。如果网络在训练后运行良好,那么(适当的)十个输出之一的激活值将非常接近于 1,其余的激活值应该非常接近于零。

我知道训练集包含 60000 个示例模式。因此,我假设目标输出数据 (y_train) 将是一个形状为 60000x10 的 2D numpy 数组。我决定仔细检查并执行 print(y_train.shape)看到它说 (60000,) 感到非常惊讶...通常您会期望看到目标模式的大小与输出层中的节点数相同。我心想,“好吧,很明显,softmax 是一个不寻常的特例,我们只需要一个目标”......我的下一个想法是 - 我怎么能从任何文档中知道这一点?......到目前为止我还没有找到任何东西。

最佳答案

我认为你在错误的方向搜索。这不是因为 softmax。 Softmax 函数(不是层)接收 n 个值并产生 n 个值。这是因为 sparse_categorical_crossentropy损失。

official document您可以检查是否应该将目标值作为标签整数提供。您还可以看到,使用 (60000,10) 形状的损失完全相同。作为目标值,即 CategoricalCrossentropy 损失。

您可以根据提供的数据格式选择要使用的损失。由于 MNIST 数据被标记为整数而不是单热编码,因此本教程使用 SparseCategoricalCrossentropy 损失。

关于python - 理解 softmax 输出层的目标数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60450394/

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