通过这篇文章,相信大家会对git会有一些更深刻的体会。此篇文章先扼要总结了git和分支管理的基本原理(这是去年2月份我在博客上总结的),在这之后,是zhupc老铁总结的git一个应用分支管理调参的实战。
1 理解Git的暂存区
理解Git的暂存区(stage 或 index)如下图所示,左侧是工作区(working directory),右侧是版本库(Repository),每次add某个文件时,就会存放在版本库的stage,commit后才真正的提交到本地的版本库中,默认git init时,会创建一个master分支,以及一个指向master的指针Head。
如果修改的文件不存放到stage中,就直接commit,修改就不会提交到本地版本库。
2 分支管理
初始只有一个master分支,HEAD指向master,如下图所示:
接下来,我们创建一个branch分支,注意创建一个branch分支,仅仅创建一个branch指针,其引用mastergit查看本地分支,并修改HEAD使其指向branch,由此看见创建分支并无任何对文件复制的操作,效率很高。如下图所示,
接下来,我们在分支上做一些修改,如下所示修改部分再用一个小方框示意出来,此时将branch和HEAD同时指向分支的最新修改。
如何将分支上修改合并到master中? git的操作就是修改master指针指向,指向branch中的修改,HEAD指向master,删除branch指针。
3 Git分支的实战:用于调参
Git 作为一个强大的版本控制工具,无论是从事什么工作我觉得都应该了解掌握。本文分享一个笔者在工作中遇到的问题,并用Git强行解决,减轻了不少的工作量。
从事一下算(tiao)法(can)工作,避免不了尝试各种参数,各种tricks。此处就会有矛盾,当你有个新想法想加入到你的模型中,但是这个新的想法又会影响你其他超参数的值。比如说:目前使用dropout作为正则化手段,你的较优参数配置如下:这是caffe中的deploy文件
假设这组参数能够使得模型达到不错的效果,此时你又想试试BN的效果如何,此刻你有三种方式去改参数:
1)、直接在源文件里修改,更改net文件的配置,然后再慢慢调试其他的超参数。然后发现效果不如之前的好git查看本地分支,想要改回去,记性不好的你可能懵逼,我上个学习率设置的多少?
2)、直接拷贝一份,然后你又有其他的新trick想加入到模型中,此时你就会拷贝N份
3)、使用Git 来控制,这里不使用发布版本的方式,因为你每次反悔可能都需要回退版本,而我们新的trick 跟我们的其他模型配置都是并行,不是一种串行工作,所以这里采用 Git中的分支,来管理其他模型配置文件。
首先提交本次记录,否则的你来回切换分支会导致之前在工作区的内容被清空,或者切换失败。
首先初始化一个Git 库:
把配置文件添加到暂存区
提交本次修改 注释写为 dropout model
现在创建一个想要使用BN正则化的模型分支
切换到BN分支,去快乐的调参吧。
跟上次相比,使用BN后,学习率设置为0.05效果最好,但是还是不如上个模型好
果断切换到原来的模型
现在以前的配置又回来了
如果你觉得BN没什么用,没有优化的潜力了,那就删掉它
现在我们分支里面只有一个主分支了