【问题标题】:CNN model Categorical error: logits and labels must be broadcastable: logits_size=logits_size=[32,10] labels_size=[32,8] this errorCNN模型分类错误:logits和labels must be broadcastable: logits_size=logits_size=[32,10] labels_size=[32,8]这个错误
【发布时间】:2021-05-12 21:47:43
【问题描述】:

我想使用 cnn 对这些水果数据进行分类。当我在制作所有层后使用分类器拟合模型时,我得到了这个错误。 这里我尝试在图像分类上运行 CNN 模型。

                                   shear_range = 0.2,
                                   zoom_range = 0.2,
                                   horizontal_flip = True)
train_set = train_datagen.flow_from_directory('/content/drive/MyDrive/data_set_skin_cancer_classifier_ham10000/train_set',
                                                 target_size = (224, 224),
                                                 batch_size = 32,
                                                 class_mode = "categorical")
validation_datagen = ImageDataGenerator(rescale = 1./255)
validation_set = validation_datagen.flow_from_directory('/content/drive/MyDrive/data_set_skin_cancer_classifier_ham10000/validation_set',
                                            target_size = (224, 224),
                                            batch_size = 32,
                                            class_mode = "categorical")

test_datagen = ImageDataGenerator(rescale = 1./255)
test_set = test_datagen.flow_from_directory('/content/drive/MyDrive/data_set_skin_cancer_classifier_ham10000/test_set',
                                            target_size = (224, 224),
                                            batch_size = 32,
                                            class_mode = 'categorical')

model = Sequential()


model.add(Conv2D(32, (3, 3), padding="same", activation ='relu', input_shape = [224, 224, 3]))
model.add(MaxPooling2D(pool_size = (2,2) ,strides = 2))



model.add(Flatten())
model.add(Dense(units=128, activation='relu'))
model.add(Dense(10, activation='softmax'))

model.compile(optimizer = 'adam', loss = 'categorical_crossentropy', metrics = ['accuracy'])

hist=model.fit(train_set , validation_data = validation_set , epochs=10, verbose=1) 





上一个代码问题的后续错误

error problem name
Epoch 1/10
---------------------------------------------------------------------------
InvalidArgumentError                      Traceback (most recent call last)
<ipython-input-57-170508ee1342> in <module>()
----> 1 hist=model.fit(train_set , validation_data = validation_set , epochs=10, verbose=1)

6 frames
/usr/local/lib/python3.7/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,8]
     [[node categorical_crossentropy/softmax_cross_entropy_with_logits (defined at <ipython-input-57-170508ee1342>:1) ]] [Op:__inference_train_function_2244]

Function call stack:
train_function

【问题讨论】:

  • 改成Dense(8, activation='softmax')有帮助吗?

标签: python tensorflow keras deep-learning


【解决方案1】:

您使用的数据集似乎提供了 8 个不同的类别,编码为 one-hot labels。将 softmax 层的大小更改为 8 应该可以解决问题:

model.add(Dense(10, activation='softmax'))  # insert 8 here instead

【讨论】:

    猜你喜欢
    • 2020-11-30
    • 2017-09-12
    • 2021-12-29
    • 2022-01-23
    • 2021-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多