【问题标题】:Shapes (None, 1) and (None, 6) are incompatible in CNN形状 (None, 1) 和 (None, 6) 在 CNN 中不兼容
【发布时间】:2022-10-19 21:13:52
【问题描述】:

这是我的 y_train:

array(['smallpox', 'chickenpox', 'cowpox', ..., 'monkeypox', 'smallpox',
       'smallpox'], dtype='<U10')

包含 6 个不同的类别,我得到的错误是我的形状在最后一层不正确

型号是型号:

  "model_19"
    _________________________________________________________________
     Layer (type)                Output Shape              Param #   
    =================================================================
     input_48 (InputLayer)       [(None, 64, 64, 3)]       0         
                                                                     
     conv2d_23 (Conv2D)          (None, 64, 64, 3)         84        
                                                                     
     efficientnetb3 (Functional)  (None, None, None, 1536)  10783535 
                                                                     
     global_average_pooling2d_16  (None, 1536)             0         
      (GlobalAveragePooling2D)                                       
                                                                     
     dense_59 (Dense)            (None, 6)                 9222      
                                                                     
    =================================================================
    Total params: 10,792,841
    Trainable params: 10,705,538
    Non-trainable params: 87,303
    _________________________________________________________________
    

错误是:

    ValueError: Shapes (None, 1) and (None, 6) are incompatible

【问题讨论】:

  • 你是标签字符串吗?它们需要映射到从 0 开始的唯一整数值​​。然后使用 sparse_categorical_crossentropy 作为您的损失或 one-hot 编码您的整数标签并使用 categorical_crossentropy
  • 为什么我不能预测类别上升为一个字符串?
  • 好吧,因为您的损失函数适用于数字,并且您希望根据损失更新模型的权重..您可以在推理过程中轻松地将预测映射回字符串..

标签: tensorflow


【解决方案1】:

您可以使用 pandas.Categorical 将字符串类型的类别转换为整数。例如

我创建了一个包含标签的数据框

df = pd.DataFrame({'labels':['apple','mango','orange','apple']})

您可以将它们转换为整数 pandas.Categorical

df['int'] = pd.Categorical(df['labels']).codes

输出:

   labels   int
0   apple   0
1   mango   1
2   orange  2
3   apple   0

然后你可以传递这些整数来训练你的模型。谢谢你。

【讨论】:

    猜你喜欢
    • 2022-11-06
    • 2020-08-27
    • 2021-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多