【问题标题】:Keras: logits and labels must be broadcastable: logits_size=[32,4] labels_size=[32,2]Keras:logits 和标签必须是可广播的:logits_size=[32,4] labels_size=[32,2]
【发布时间】:2021-05-25 13:23:21
【问题描述】:

我正在尝试使用 Keras 来处理图像分类器,但我不断收到错误消息:

InvalidArgumentError:logits 和标签必须是可广播的: logits_size=[32,4] labels_size=[32,2] [[节点 categorical_crossentropy/softmax_cross_entropy_with_logits(定义于 :2) ]] [操作:__inference_train_function_10520]

函数调用栈:train_function

我正在创建这样的模型:

base_model = ResNet50(include_top=False, weights='imagenet')
x = base_model.output
x = GlobalAveragePooling2D()(x)
x = Dense(1024, activation='relu')(x)
predictions = Dense(4, activation='softmax')(x)
model = Model(inputs=base_model.input, outputs=predictions)
model.compile(optimizer=SGD(lr=0.0001, momentum=0.9), loss='categorical_crossentropy', metrics = ['accuracy'])
data_folder = os.path.join("data", "train_min")
test_folder = os.path.join("data", "test_min")

train_datagen = ImageDataGenerator(rescale = 1./255,
                               shear_range = 0.2,
                               zoom_range = 0.2,
                               horizontal_flip = True)

test_datagen = ImageDataGenerator(rescale = 1./255)

training_set = train_datagen.flow_from_directory(data_folder,
                                             target_size = (224, 224),
                                             batch_size = 32,
                                             class_mode = 'categorical')

test_set = test_datagen.flow_from_directory(test_folder,
                                        target_size = (224, 224),
                                        batch_size = 32,
                                        class_mode = 'categorical')

创建 training_set 和 test_set 后,我​​收到消息

找到属于 2 个类别的 3520 张图片。 (training_set)

找到属于 2 个类别的 480 张图片。 (test_set)

所以加载图像工作正常,我猜。



但是当我尝试执行这段代码时:

model.fit_generator(training_set,
                         steps_per_epoch = 8000,
                         epochs = 5,
                         validation_data = test_set,
                         validation_steps = 200)

我收到了上面已经向您展示过的错误:

InvalidArgumentError:logits 和标签必须是可广播的: logits_size=[32,4] labels_size=[32,2] [[节点 categorical_crossentropy/softmax_cross_entropy_with_logits(定义于 :2) ]] [操作:__inference_train_function_10520]

函数调用栈:train_function

如何更改标签大小?当我创建训练集时,标签不是自动完成的吗?什么是 logits?

【问题讨论】:

  • 您的最后一层应该与您拥有的类别数相匹配

标签: python keras image-classification


【解决方案1】:

尝试将 4 更改为 2 行: 预测 = Dense(4, activation='softmax')(x)

【讨论】:

  • 这是修复他们的错误的直接答案。从更大的角度来看,他们的任务似乎是二元分类。他们应该通过 sigmoid 激活将最终 Dense 中的单元设置为 1,将 flow_from_directory 中的类模式设置为“binary”,并使用 binary_crossentropy 作为损失函数。
猜你喜欢
  • 2021-12-29
  • 2022-01-23
  • 2021-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-12
  • 2020-11-30
  • 1970-01-01
相关资源
最近更新 更多