过拟合问题
来源: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
至于为何会过拟合,我觉得可能有两个点:
程序有问题,比如数据增强的方法是否真的应用上了,网络是否太大等。
底层实现不同,比如tf内的optimizer跟pytorch可能不一样,所以可能需要learning_rate调小等。之前遇到过同样的实现在tf1.*不收敛,在tf2上可以,解决的方法就是在tf1上调小learning_rate。
00
相似问题