tensorflow关于bn层使用问题,特别是train参数的设置问题

描述坑的过程:

resnet50做分类,使用了bn层

在训练的时候用了一个is_train占位符来区分训练和测试(单独区分开的,并不是一起做的)

训练的时候is_train=True,测试的时候is_train=False

现象:训练精度很高,测试精度不忍直视

问题原因:

这个可能是因为没有把bn层里面的训练时统计出的参数保持下来造成的,在保存模型的时候,除了保存weights,bias,还要保存bn中的mean,var等统计参数。测试的时候,is_training=True,用的是当前batch内的统计参数,这个没问题。is_training=False,用的是保存的参数,如果没保存,就直接初始化,这个肯定效果不好.

所以需要把bn层的统计参数在保存的时候也一起存起来.

存模型的时候不能只保存trainable_variables因为BN的参数不属于trainable_variables。为了方便,可以用tf.global_variables()。使用姿势如下

saver = tf.train.Saver(var_list=tf.global_variables())
savepath = saver.save(sess, 'here_is_your_personal_model_path’)

使用方法:

x_norm = tf.layers.batch_normalization(x, training=training)

# ...

update_ops = tf.get_collection(tf.GraphKeys.UPDATE_OPS)
with tf.control_dependencies(update_ops):
    train_op = optimizer.minimize(loss)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值