定义模型以减少批量归一化的过度拟合效果

问题描述

我正在尝试使用转移学习从30个类别和7200张图像(80%训练,10%验证,10%测试)的预训练模型训练模型。尽管更改了各种参数,但是我的模型总是过拟合。在阅读了此链接https://www.tensorflow.org/tutorials/images/transfer_learning#create_the_base_model_from_the_pre-trained_convnets之后,我知道即使卷积基础已冻结,批次规范化也总是更新方差。

因此,我在base_model中设置了training = false。但是,我仍然感到困惑。我的代码正确吗?因为我的图片是使用ImageDataGenerator进行增强的,而不像将增强和预处理用作基本模型输入的示例那样。

这是我的代码

#Create the model
inputs = keras.Input(shape=(224,224,3))
x = base_model(inputs,training=False)
x = tf.keras.layers.GlobalAveragePooling2D()(x)
outputs = tf.keras.layers.Dense((len(CLASS_NAMES)),activation='softmax')(x)
model = tf.keras.Model(inputs,outputs)

history = model.fit_generator(train_data_gen,epochs=epochs,steps_per_epoch=int(np.ceil(total_train / float(BATCH_SIZE))),validation_data=val_data_gen,validation_steps=int(np.ceil(total_val / float(BATCH_SIZE))),callbacks=[cm_callback,tensorboard_callback])

输出

576/576 [==============================] - 157s 273ms/step - loss: 0.0075 - accuracy: 0.9996
144/144 [==============================] - 26s 181ms/step - loss: 0.0092 - accuracy: 1.0000

[0.007482105916197825,0.99956596]
[0.009182391463279297,1.0]

如果我的代码正确,验证精度是否等于1(太准确)好吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...