Python InvalidArgumentError:logits和labels必须具有相同的第一维度、Get logits形状[1,10]和labels形状[40]

Python InvalidArgumentError:logits和labels必须具有相同的第一维度、Get logits形状[1,10]和labels形状[40],python,keras,keras-tuner,Python,Keras,Keras Tuner,我正在使用Keras调谐器自动识别CNN的最佳参数。我使用的是Celeb_数据集 你可以找到我正在使用的代码 当我尝试运行它时,我得到下面的错误 InvalidArgumentError:登录名和标签必须具有相同的首字母 尺寸,得到罗吉斯形状[1,10]和标签形状[40] [[节点稀疏\u分类\u交叉熵/SparseSoftmaxCrossEntropyWithLogits/SparseSoftmaxCrossEntropyWithLogits] (定义于 C:\Users\admin sepr

我正在使用Keras调谐器自动识别CNN的最佳参数。我使用的是Celeb_数据集

你可以找到我正在使用的代码 当我尝试运行它时,我得到下面的错误

InvalidArgumentError:登录名和标签必须具有相同的首字母 尺寸,得到罗吉斯形状[1,10]和标签形状[40] [[节点稀疏\u分类\u交叉熵/SparseSoftmaxCrossEntropyWithLogits/SparseSoftmaxCrossEntropyWithLogits] (定义于 C:\Users\admin sepr\anaconda3\envs\tf\lib\site packages\kerastuner\engine\tuner.py:141) ]][Op:uu推理u训练u功能953]

我在其他地方看到,这可能是因为在编译代码时使用了
loss=“categorical\u crossentropy”
,他们建议尝试使用
loss=“sparse\u categorical\u crossentropy”

当我这样做时,我得到以下错误

InvalidArgumentError:登录和标签必须可广播: logits_size=[64380192]标签_size=[64,40][[node] 分类交叉熵/softmax交叉熵与逻辑(定义见 C:\Users\admin sepr\anaconda3\envs\tf\lib\site packages\kerastuner\engine\tuner.py:141) ]][Op:uuu推理u训练u功能u 6830]

对于这两个错误,函数调用堆栈如下所示

Function call stack:
train_function
我的功能train_功能如下(上面提供完整代码):


我在中尝试了推荐的,但没有获得任何成功。

您从Celeb_A数据集加载的数据似乎与您尝试训练的模型不兼容。从仅仅扫描代码看来,您需要更改输出密集层中的节点数。此数量(当前有10个节点)应与预期预测的标签数量相匹配。从错误来看,您预测的标签似乎有40个,但模型认为只有10个


我的最佳猜测是将损失保持为分类交叉熵,并将输出密集层更改为密集层(40),而不是密集层(10)。

谢谢,这非常有效。我必须将输出密集层更改为密集层(40),而不是密集层(10)。我的激活层也有问题,需要设置为激活('relu'),我的批量大小是错误的,需要为1进行验证,class_mode='raw',一旦我做了这些更改,它就会正常运行。非常感谢。
train_generator = train_datagen.flow_from_dataframe(
                                        dataframe=train_split,
                                        directory=celeba.images_folder,
                                        x_col='image_id',
                                        y_col=celeba.features_name,
                                        target_size=TARGET_SIZE,
                                        batch_size=64,
                                        class_mode='raw',
                                        dtype=tf.float32)