ValueError:"logits"和"labels"必须具有相同的形状,已接



我正在运行一个对合模型(基于此示例(,在训练阶段我经常遇到错误。这是我的错误:

ValueError: `logits` and `labels` must have the same shape, received ((None, 10) vs (None, 1)).

以下是数据集加载的相关代码:

train_datagen = ImageDataGenerator(
rescale=1./255,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True)
test_datagen = ImageDataGenerator(rescale=1./255)
train_ds = train_datagen.flow_from_directory(
'data/train',
target_size=(150, 150),
batch_size=128,
class_mode='binary')
test_ds = test_datagen.flow_from_directory(
'data/test',
target_size=(150, 150),
batch_size=64,
class_mode='binary')`

这是训练代码:

print("building the involution model...")
inputs = keras.Input(shape=(224, 224, 3))
x, _ = Involution(channel=3, group_number=1, kernel_size=3, stride=1, reduction_ratio=2, name="inv_1")(inputs)
x = keras.layers.ReLU()(x)
x = keras.layers.MaxPooling2D((2, 2))(x)
x, _ = Involution(
channel=3, group_number=1, kernel_size=3, stride=1, reduction_ratio=2, name="inv_2")(x)
x = keras.layers.ReLU()(x)
x = keras.layers.MaxPooling2D((2, 2))(x)
x, _ = Involution(
channel=3, group_number=1, kernel_size=3, stride=1, reduction_ratio=2, name="inv_3")(x)
x = keras.layers.ReLU()(x)
x = keras.layers.Flatten()(x)
x = keras.layers.Dense(64, activation="relu")(x)
outputs = keras.layers.Dense(10)(x)
inv_model = keras.Model(inputs=[inputs], outputs=[outputs], name="inv_model")
print("compiling the involution model...")
inv_model.compile(
optimizer="adam",
loss=keras.losses.BinaryCrossentropy(from_logits=True),
metrics=["accuracy"],
)
print("inv model training...")
inv_hist = inv_model.fit(train_ds, epochs=20, validation_data=test_ds)`

该模型本身与Keras使用的模型相同,除了使用我自己的数据集而不是CIFAR数据集(该模型适用于我的数据集(外,我没有做任何更改。所以我确信我的数据加载中有一个错误,但我无法确定那是什么

型号摘要:

Model: "inv_model"
_________________________________________________________________
Layer (type)                Output Shape              Param #   
=================================================================
input_14 (InputLayer)       [(None, 224, 224, 3)]     0         

inv_1 (Involution)          ((None, 224, 224, 3),     26        
(None, 224, 224, 9, 1,             
1))                                 

re_lu_39 (ReLU)             (None, 224, 224, 3)       0         

max_pooling2d_26 (MaxPoolin  (None, 112, 112, 3)      0         
g2D)                                                            

inv_2 (Involution)          ((None, 112, 112, 3),     26        
(None, 112, 112, 9, 1,             
1))                                 

re_lu_40 (ReLU)             (None, 112, 112, 3)       0         

max_pooling2d_27 (MaxPoolin  (None, 56, 56, 3)        0         
g2D)                                                            

inv_3 (Involution)          ((None, 56, 56, 3),       26        
(None, 56, 56, 9, 1, 1)            
)                                   

re_lu_41 (ReLU)             (None, 56, 56, 3)         0         

flatten_15 (Flatten)        (None, 9408)              0         

dense_26 (Dense)            (None, 64)                602176    

dense_27 (Dense)            (None, 10)                650       

=================================================================

当您调用train_datagen.flow_from_directory()函数时,您使用了class_mode='binary',这意味着您的图像标签仅为0和1,而您总共有10个预测,即最终输出层中的10个神经元。因此标签和逻辑不匹配。解决方案:使用class_mode='categorical',这意味着将有与类数量一样多的标签。在test_datagen中也执行同样的操作。

相关内容

  • 没有找到相关文章