如何解决CNN模型分类错误:logits和标签必须是可广播的:logits_size = [32,10] labels_size = [32,13]
在这里,我正在尝试对图像分类运行CNN模型。
这是批次大小和13个标签
Image batch shape: (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,3)))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Conv2D(64,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,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
如何解决此类别错误
解决方法
该错误是由以下行引起的:
model.add(Dense(10,activation='softmax'))
重要的是,最后一层包含的神经元数量与数据集中类别的数量一样多。我猜您有13个类别,所以应该是13个。您也可以使用
model.add(Dense(len(train_generator.classes),activation='softmax'))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。