对我的项目的描述,我正在尝试训练一个网络,它可以识别包含从0到9的数字的图片,并将其分类。我的模型如下
model = Sequential(
[
tf.keras.applications.MobileNetV2(include_top=False, input_shape=(224, 224, 3)),
Flatten(),
Dense(128), LeakyReLU(alpha=.3),
Dense(128), LeakyReLU(alpha=.3),
Dense(128), LeakyReLU(alpha=.3),
Dense(128), LeakyReLU(alpha=.3),
Dense(10, activation='softmax')
])
model.compile(
optimizer='adam',
loss='categorical_crossentropy',
metrics=['categorical_accuracy','accuracy','mae'])
我不认为这是来自数据生成器的数据生成器的问题,该生成器使用opencv的putText函数创建带有数字的新图片,使用随机字体、字体大小/粗细以及随机旋转和移动,这意味着所有数据都是完全唯一的。我也在视觉上验证了数据,看起来没有什么异常。我做了两个实验。首先,我创建了两个独立的生成器,一个训练生成器和一个验证生成器,在纪元的末尾,以前的验证数据变成了训练数据,并为验证创建了新的数据,但是当这种情况发生时,我根本没有看到训练指标下降。接下来,我用一组静态训练数据训练模型,它使用完全相同的数据进行验证。
train_x,train_y=new_data(3200)
列车_x=列车_x/255
历史记录= model.fit(train_x,train_y,steps_per_epoch=steps,epochs=15,verbose=1,validation_data=(train_x,train_y))
然而,在这种情况下,尽管是完全相同的数据,但验证指标比附加图像中显示的训练指标差得多。有人知道这是怎么回事吗?我是不是误解了keras的训练过程?
发布于 2021-09-04 01:43:09
问题出在MobileNetV2模型中的批处理归一化层,特别是批处理归一化动量参数,如中所述:
fit() works as expected but then during evaluate() model performs at chance
一个快速的解决方法是将.999的默认动量更改为.9
https://stackoverflow.com/questions/69048548
复制相似问题