在TensorFlow中对量化图使用正则化

时间:2019-04-23 19:10:25

标签: python tensorflow

我正在尝试在自己的数据集中将Quantization-aware training用于mobilenet_v1。我首先用tf.losses.softmax_cross_entropy训练网络以进行分类输出,并将tf.nn.l2_loss应用于权重。这可以按预期工作,并且我获得约70%的准确性,这真是太好了!然后,我用以下内容对量化图进行微调:

model = get_model()
c_ent = get_cross_ent()
wd = get_weight_decay()
loss = c_ent + 0.01 * wd #blue graph bellow
#loss = c_ent #red graph bellow

g = tf.get_default_graph()
tf.contrib.quantize.create_training_graph(input_graph=g,
                                      quant_delay=0)

train_step = tf.train.AdamOptimizer(lr).minimize(loss)

这是随时间的交叉熵损失。蓝色代表体重下降,红色代表体重下降。

Cross entropy loss

该图是重量衰减损失。再次,蓝色是有,红色是没有。

Weight decay loss

如您所见,当将权重衰减损失添加到总损失中时,交叉熵损失会增加到某个值,然后保持不变。消除权重衰减损失会导致交叉熵值减小,但是我几乎肯定它是过拟合的,因为精度超过了原始网络的精度,并且权重值飞涨。

在这种“量化意识”训练模式中添加权重正则化的正确方法是什么?

另一个奇怪的事情是,将重量衰减损失加到总损失中后,它变得非常接近于零。

0 个答案:

没有答案