我正在尝试在自己的数据集中将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)
这是随时间的交叉熵损失。蓝色代表体重下降,红色代表体重下降。
该图是重量衰减损失。再次,蓝色是有,红色是没有。
如您所见,当将权重衰减损失添加到总损失中时,交叉熵损失会增加到某个值,然后保持不变。消除权重衰减损失会导致交叉熵值减小,但是我几乎肯定它是过拟合的,因为精度超过了原始网络的精度,并且权重值飞涨。
在这种“量化意识”训练模式中添加权重正则化的正确方法是什么?
另一个奇怪的事情是,将重量衰减损失加到总损失中后,它变得非常接近于零。