sparse_categorical_crossentropy 的维度错误

Dimension error with sparse_categorical_crossentropy

我有一个加权 sparse_categorical_crossentropy 损失,它在更新到 Keras 2.1.1 后不起作用。我之前用的是2.0.6,当时用的还不错

输出层有2个类(0和1)。我将带有额外维度的扁平一维数组作为标签传递。

label = label.flatten().astype(np.int16)
label = np.expand_dims(label, axis=-1)

如果我直接调用 sparse_categorical_crossentropy 则不会显示任何错误并开始训练。为了验证自定义加权损失函数的调用方式没有任何问题,我从 keras/backend/tensorflow_backend.py[ 复制了 sparse_categorical_crossentropy =30=],将其重命名为scc并赋值给损失函数。

// default
net.model.compile(optimizer=Adam(lr=0.001), loss=sparse_categorical_crossentropy)

// scc is just a copy of sparse_categorical_crossentropy from tensorflow_backend
net.model.compile(optimizer=Adam(lr=0.001), loss=scc)

这会产生以下错误:

ValueError: Error when checking target: expected mask to have shape (None, 4096, 2) but got array with shape (8, 4096, 1)

如果我将标签更改为One-Hot编码格式以对应2个标签,则tensorflow会抛出错误,如下所示:

label = np.hstack((label, (~label.astype(bool)).astype(int)))

W tensorflow/core/framework/op_kernel.cc:1192] Invalid argument: logits and labels must have the same first dimension, got logits shape [32768,2] and labels shape [65536]

知道我做错了什么吗?

问题已在 8514 中修复。

Keras Issue