use*_*467 5 python neural-network keras tensorflow
mnist当我从 Keras加载数据集时,我得到 4 个变量 -
(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()
Run Code Online (Sandbox Code Playgroud)
的形状x_train是(60000, 28, 28),这是有道理的,因为它包含 60,000 张 28x28 图片
的形状y_train正好(60000,)表明它是一个包含数字目标标签(0-9)的一维向量。
为了进行数字分类,神经网络通常输出一个具有十个维度的单热编码向量。我认为我需要使用to_categorical将 y 目标从数值转换为分类,以便使神经网络的形状输出与训练样本相匹配,这可能是(60000, 10)。
但在我在网上找到的一些示例中,to_categorical从未用于重塑训练向量。当神经网络的输出层y_train.shape保持不变时(60000,)
model.add(Dense(10, activation="softmax"))
Run Code Online (Sandbox Code Playgroud)
它输出一个 10-D one-hot 向量。
然后他们简单地训练模型就y_train没有问题
model.fit(x_train, y_train, epochs=2, validation_data=(x_test, y_test))
Run Code Online (Sandbox Code Playgroud)
这怎么可能?神经网络的输出形状是否会与 不(60000, 10)兼容(60000,)?或者 Keras 是否自动将分类输出转换为数字?
编辑:更清楚地说,我知道如何对其进行一次性编码,但我的问题是为什么他们不这样做。在该示例中,网络在没有对目标类进行 one-hot 编码的情况下工作,而网络的输出显然是 one-hot 编码的。
编辑:罗辛是对的。这只是使用sparse_crossentropy损失的效果,而不是分类损失。
将损失函数更改为
loss = 'sparse_categorical_crossentropy'
Run Code Online (Sandbox Code Playgroud)
这将起作用,并且您不必更改输入数据形状
| 归档时间: |
|
| 查看次数: |
5652 次 |
| 最近记录: |