finetune
参考链接https://blog.youkuaiyun.com/nongfu_spring/article/details/51514040
预训练模型的参数如何跟自己的网络匹配的呢
预训练的模型根据你当前网络的layer 名进行匹配参数,加入预训练原始网络的第一个卷积层name是conv1,而你自己的第一个卷积层网络name是Convolution1,那么这个层在预网络中的参数就不会被匹配调用,这就没有实现我们finetune的目的!
因为没有匹配上的layer会随机初始化
微调的意思就是先在别的数据集上进行训练,把训练好的权值,作为我们现在数据集的权值初始化,就不再需要随机初始化了
ignore_label
int型变量,默认为空。
如果指定值,则label等于ignore_label的样本将不参与Loss计算,并且反向传播时梯度直接置0.如果你有一些背景部分不想用来参与loss的计算,这里提供一个ignore_label的参数,可以把背景标记成255,然后这个参数设置成255,之后所有被标记为255的点虽然参与了forward计算,但是不会参与loss的计算,也就不会有反向传播的效果
normalize
bool型变量,即Loss会除以参与计算的样本总数;否则Loss等于直接求和
mirror:false # 1表示开启镜像,0表示关闭,也可用ture和false来表示
crop_size: 227
# 剪裁一个 227*227的图块,在训练阶段随机剪裁,在测试阶段从中间裁剪
只裁剪一次吗??
#因为在deploy中指明训练图片是227*227,这里剪裁为 227*227的图块
new_height和new_width 可以不设置,这样以来就是原始图片的大小。比如我裁剪的车辆图片是24*24,如果不设置new_height 和new_width ,这样会导致caffe运行出错,因为无法在一幅24*24的图片中裁剪出一个227*227的图片。因此,当原始图片小于227*227时,必须进行resize
需要将正负样本的顺序打乱,这样训练的效果比较好
注:如果图片过大,需要适当缩小batch_size的值,否则使用GPU时可能超出其缓存大小而报错