过拟合问题

来源:2-1 tfkeras简介

xuchengggg

2019-09-09

我用tf.keras复现一个实力分割的网络,主干网络用的resnet50,用了数据增强(random_crop, 光噪,随机翻转), 还用了batch_norm,L2正则化,batch_size是8, 用的COCO 2017数据集, 但是模型在15W步的时候就表现出来过拟合了,但是原作者是训练到80W步,不过他用的pytorch,是不是哪里出什么问题了?
另外keras的L2正则化应该怎么加呢,我是用的

reg_losses = [keras.regularizers.l2(config.WEIGHT_DECAY)(w) / tf.cast(tf.size(w), tf.float) for w in self.keras_model.trainable_weights if 'gamma' not in w.name and 'beta' not in w.name]
self.keras_model.add_loss(tf.add_n(reg_losses))

这样L2 loss就直接显示地加在loss当中了,如果不除以tf.size(W), 这个L2 loss就会很大

写回答

1回答

正十七

2019-09-19

在keras上添加L2正则化,是在每个layer上添加kernel_regulazier。你可以参考:https://segmentfault.com/a/1190000018378231

至于为何会过拟合,我觉得可能有两个点:

  1. 程序有问题,比如数据增强的方法是否真的应用上了,网络是否太大等。

  2. 底层实现不同,比如tf内的optimizer跟pytorch可能不一样,所以可能需要learning_rate调小等。之前遇到过同样的实现在tf1.*不收敛,在tf2上可以,解决的方法就是在tf1上调小learning_rate。

0
0

Google老师亲授 TensorFlow2.0 入门到进阶

Tensorflow2.0实战—以实战促理论的方式学习深度学习

1849 学习 · 896 问题

查看课程