首页 > 解决方案 > TensorFlow 预期维度为 1,CategoricalCrossentropy 损失为 10 错误

问题描述

当我尝试执行 model.compile as 时出现以下错误

model.compile(optimizer='adam',
          loss=tf.keras.losses.CategoricalCrossentropy(from_logits=True),
          metrics=['accuracy'])

ValueError:无法挤压 dim[1],预期维度为 1,对于 '{{node Squeeze}} = SqueezeT=DT_FLOAT,squeeze_dims=[-1]' 得到 10,输入形状:[?,10]

我正在尝试训练 CNN 对图像进行分类。数据集的创建方式如下:

train_dataset = tf.keras.preprocessing.image_dataset_from_directory(
'jpg',
labels=y,
label_mode='categorical',
color_mode="rgb",
batch_size=32,
image_size=(500, 500),
seed=42,
subset="training",
validation_split=0.3

)

标签 y 是以下形式的列表(一种热编码):

[[0, 0, 0, 0, 0, 0, 0, 1, 0, 0], 
 [0, 0, 1, 0, 0, 0, 0, 0, 0, 0], ...] 

这是我的顺序模型的摘要:

Layer (type)                 Output Shape              Param #  

conv2d_12 (Conv2D) (None, 498, 498, 32) 896
max_pooling2d_8 (MaxPooling2 (None, 249, 249, 32) 0
conv2d_13 (Conv2D) (None, 247, 247, 64) 18496
max_pooling2d_9 (MaxPooling2 (None, 12) , 64) 0
conv2d_14 (Conv2D) (None, 121, 121, 64) 36928
flatten_4 (Flatten) (None, 937024) 0
dense_8 (Dense) (None, 64) 59969600
dense_9 (Dense) (None, 10) 650

我的问题是,这是损失函数还是标签格式的问题?我该怎么做才能解决这个问题?

标签: pythontensorflowconv-neural-network

解决方案


推荐阅读