- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
设置
我正在使用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=1
与 loss=mse
、categorical_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/
java.lang.Throwable 的哪些子类可能被空语句抛出? 通过短语“空语句”,我指的是“无”、“分号”和“分号”: // .... A(); B(); C(); try { //
我是一名优秀的程序员,十分优秀!