gpt4 book ai didi

python - 密集层可能会产生 InvalidArgumentError : Incompatible shapes: [0, 2] 与 [32,2]

转载 作者:行者123 更新时间:2023-12-03 02:29:04 30 4
gpt4 key购买 nike

设置

我正在使用Python 3.6,TF 2.4.0在使用 1 GPU 的 Azure DSVM STANDARD_NC6(6 核、56 GB RAM、380 GB 磁盘)上

<小时/>

参数/模型

我有训练数据:print(xtrain.shape),形状为(4599, 124, 124, 3)和火车| yval 作为分类。

我使用经典的生成器

datagen = ImageDataGenerator(
zoom_range=0.1,
rotation_range=25,
width_shift_range=0.1,
height_shift_range=0.1,
shear_range=0.15,
horizontal_flip=True,
fill_mode="nearest"
)

datagen.fit(xtrain)

我的模型是带有自己头部的基础 mobilenetv2:

baseModel = MobileNetV2(weights="imagenet", 
include_top=False,
input_tensor=Input(shape=(224, 224,3)),
#input_shape=(224, 224, 3),
)

headModel = baseModel.output
headModel = AveragePooling2D(pool_size=(7, 7))(headModel)
headModel = Flatten(name="flatten")(headModel)
headModel = Dense(64, activation="relu")(headModel)
headModel = Dropout(0.5)(headModel)
headModel = Dense(2, activation="softmax")(headModel)

model = Model(inputs=baseModel.input, outputs=headModel)

for layer in baseModel.layers:
layer.trainable = False

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

当我现在适合模型时

Batch_Size=1

h = model.fit(
datagen.flow(xtrain, ytrain, batch_size=Batch_Size),
steps_per_epoch=len(xtrain) // Batch_Size,
validation_data=(xval, yval),
validation_steps=len(xval) // Batch_Size,
epochs=EPOCHS,
callbacks=[model_checkpoint_callback, Board])
<小时/>

错误

我收到错误(全部相同,但随着批量大小和损失函数的变化而变化)

当我将 batch_size=1loss=msecategorical_crossentropy 或其他一起使用时,模型会进行训练,但会在该纪元抛出以下错误结束

ValueError: Input 0 is incompatible with layer model_2: expectedshape=(None, 224, 224, 3), found shape=(1, 124, 124, 3)

如果我使用大于 1 的 batch_size,例如 32 和 loss=categorical_crossentropy,则在训练之前会抛出错误:

InvalidArgumentError: Incompatible shapes: [32] vs. [0] [[nodeEqual (defined at :12) ]][Op:__inference_train_function_65107]

loss=mse

InvalidArgumentError: Incompatible shapes: [0,2] vs. [32,2] [[nodegradient_tape/mean_squared_error/BroadcastGradientArgs (defined at:12) ]][Op:__inference_train_function_81958]

如果我更改最后一个密集层的隐藏单位,错误将更改为该值。例如

...
headModel = Dense(5, activation="softmax")(headModel)

结果

InvalidArgumentError: Incompatible shapes: [0,5] vs. [32,2]

显然正确的输入形状在某个地方丢失了。特别是批量大小(第二维基于密集隐藏单元)。有人有想法吗?谢谢

我从 git 上的这个旧线程中检查了许多答案:https://github.com/kuza55/keras-extras/issues/7但在那里找不到解决方案。

最佳答案

您输入到网络的数据必须具有与网络输入相同的形状。您正在尝试向接受尺寸为 224x224x3 的图像的网络提供尺寸为 124x124x3 的数据。

您可以:

  • 使用兼容的输入维度加载 mobilenet 网络

    baseModel = MobileNetV2(weights=None, 
    include_top=False,
    input_tensor=Input(shape=(124, 124,3)),
    )

    这种方法的缺点是无法使用预训练的权重。

  • 将输入数据重新调整为模型输入的大小。在这种情况下,请将 124xx124 图像大小调整为 224x224。有很多方法可以做到这一点,但如果您愿意保留 ImageDataGenerator,我建议您提前这样做。

关于python - 密集层可能会产生 InvalidArgumentError : Incompatible shapes: [0, 2] 与 [32,2],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65843923/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com