Python CNN模型分类错误:logits和标签必须可广播:logits_size=[32,10]labels_size=[32,13]

Python CNN模型分类错误:logits和标签必须可广播:logits_size=[32,10]labels_size=[32,13],python,tensorflow,keras,cnn,Python,Tensorflow,Keras,Cnn,在这里,我尝试运行CNN图像分类模型 这是批次大小和13个标签 Image batch shape: (32, 32, 32, 3) Label batch shape: (32, 13) ['Watch_Back' 'Watch_Chargers' 'Watch_Earpods' 'Watch_Front' 'Watch_Lifestyle' 'Watch_Others' 'Watch_Packages' 'Watch_Side' 'Watch_Text' 'Watch_Tilted'

在这里,我尝试运行CNN图像分类模型

这是批次大小和13个标签

Image batch shape:  (32, 32, 32, 3)
Label batch shape:  (32, 13)
['Watch_Back' 'Watch_Chargers' 'Watch_Earpods' 'Watch_Front'
 'Watch_Lifestyle' 'Watch_Others' 'Watch_Packages' 'Watch_Side'
 'Watch_Text' 'Watch_Tilted' 'Watch_With_Accessories'
 'Watch_With_Ear_Pods' 'Watch_With_People']
以下是cnn的模式

model = Sequential()
model.add(Conv2D(32, (5, 5), activation='relu', input_shape=(32,32,3)))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(64, (5, 5), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(1000, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(500, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(250, activation='relu'))
model.add(Dense(10, activation='softmax'))

model.compile(loss='categorical_crossentropy', 
              optimizer='adam',
              metrics=['accuracy'])
从代码的以下部分,出现错误:

steps_per_epoch = np.ceil(train_generator.samples/train_generator.batch_size)
val_steps_per_epoch = np.ceil(valid_generator.samples/valid_generator.batch_size)
hist = model.fit(
train_generator,
epochs=10,
verbose=1,
steps_per_epoch=steps_per_epoch,
validation_data=valid_generator,
validation_steps=val_steps_per_epoch).history
下面是错误

Epoch 1/10
---------------------------------------------------------------------------
InvalidArgumentError                      Traceback (most recent call last)
<ipython-input-64-b89d5efc8aaf> in <module>()
      7 steps_per_epoch=steps_per_epoch,
      8 validation_data=valid_generator,
----> 9 validation_steps=val_steps_per_epoch).history

8 frames
/usr/local/lib/python3.6/dist-packages/tensorflow/python/eager/execute.py in quick_execute(op_name, num_outputs, inputs, attrs, ctx, name)
     58     ctx.ensure_initialized()
     59     tensors = pywrap_tfe.TFE_Py_Execute(ctx._handle, device_name, op_name,
---> 60                                         inputs, attrs, num_outputs)
     61   except core._NotOkStatusException as e:
     62     if name is not None:

InvalidArgumentError:  logits and labels must be broadcastable: logits_size=[32,10] labels_size=[32,13]
     [[node categorical_crossentropy/softmax_cross_entropy_with_logits (defined at <ipython-input-64-b89d5efc8aaf>:9) ]] [Op:__inference_train_function_6504]

Function call stack:
train_function
1/10纪元
---------------------------------------------------------------------------
InvalidArgumentError回溯(最后一次最近调用)
在()
7步/u历元=步/u历元,
8验证\u数据=有效的\u生成器,
---->9验证步骤=每个历元的验证步骤)。历史
8帧
/快速执行中的usr/local/lib/python3.6/dist-packages/tensorflow/python/eager/execute.py(op_name、num_output、input、attrs、ctx、name)
58 ctx.确保_已初始化()
59张量=pywrap\u tfe.tfe\u Py\u Execute(ctx.\u句柄、设备名称、操作名称、,
--->60个输入、属性、数量输出)
61除堆芯外,其他状态除外,如e:
62如果名称不是无:
InvalidArgumentError:登录和标签必须可广播:登录\u大小=[32,10]标签\u大小=[32,13]
[[node Category_crossentropy/softmax_cross_entropy_with_logits(定义于:9)]][Op:_推理_训练_函数_6504]
函数调用堆栈:
列车功能

如何解决此分类错误

此错误由以下行引起:

model.add(Dense(10, activation='softmax'))
重要的是,最后一层包含的神经元数量与数据集中的类别数量相同。我猜你有13个类别,所以应该是13个。你也可以使用

model.add(Dense(len(train_generator.classes), activation='softmax'))