-
Notifications
You must be signed in to change notification settings - Fork 202
Home
Charlotte edited this page Jan 29, 2018
·
22 revisions
- 记录在学习paddle和深度学习中踩到的坑
- 第一篇博文:PaddlePaddle手写数字识别
- 第二篇博文:CNN原理详解
- pooling部分没有写avg pooling,埋坑
- 第三篇博文:paddle数据预处理,创建自己的数据集。
- 一个问题:很多框架都喜欢在这种上手的例子把数据内置,这样的好处是方便用户,更易上手,同样也有缺点,让用户用自己的数据集的时候不知道该如何下手,是否可以先教用户如何处理自己的数据,再告诉用户,如果想跳过这一步骤,可以先用内置的方法。
- reader函数感受:比tf的数据预处理流程方便,直接在一个函数命令里就可以搞定。
- 本来应该是11.15日更新的,因为计划整个系列的内容耽误了,下不为例。
- 第四篇博文:CNN详细讲解,包括CNN的反向传播,自己实现了CNN。不过这里是借鉴了别人写的,我自己写了一个,但是测试的结果总是感觉不太对,所以就借鉴了以为代码风格很好的同学的写法。关于CNN的反向传播我觉得还是有必要掌握的,至少知道整个过程,参数是如何计算并传递的,心里踏实一点。
- 意外发现:第一篇博文里的simple_img_conv_pool把conv和pool两层结合在一起,非常方便啊,tf里面有吗?我只记得有tf.nn.conv2d和tf.nn.max_pool,有两者结合的吗?
- 第五篇博文:用paddle和tf进行图像分类
- 真的很想吐槽,可能是自己用tf用的还不够溜,但是真的觉得用起来很麻烦,之前用过mxnet写模型,也比tf顺手,paddle写模型也很快,简洁明了。不行,我得再花时间搞搞tf,多练练手。
- 关于实验结果:用之前做手写数字识别的网络结构(也就是官网的结构)去分类cifar10数据,效果并不好,后来用LeNet-5网络结构效果也不好,一是迭代次数确实设置的很少,只有200次,tf的models里的都迭代了10w次呢!我再试试加大迭代次数看看效果。当然网络结构也是需要改进的,用vgg和resnet都能上80%,dropout和bn都可以加起来。
- 周末两天未更新,去滑雪了,会滑初-中级道了哈哈
- 今天看了两年前自己写的auto-encoder代码,没有main函数,没有代码风格,没有外部参数,需要改一下。
- 训练alexnet的paddle模型和Tensorflow模型,比对一下效果。
- 修改了一下autoencoder的代码,支持batch训练方式
- 开心!上午写了支持batch读取文件的autoencoder,验证了一下效果没有问题。第一次迭代时,权重初始化,后面的batch基于前面的batch训练时,需要基于上一次训练的w和b,我的方法是训练完把w和b保存下来,cpickle.dump,下一次训练时再load pkl文件,这种方式和parameter server不是一样的吗!!把所有的参数都传到参数服务器上,其他的worker节点只需要训练数据即可。这样的话,我就可以写一个分布式的autoencoder了哈哈!等会去看看tf的分布式源码,借鉴一下~~~
- ToDo(tomorrow): -- 支持多线程batch_reader -- 支持多GPUbatch_reader
- 发布第六篇博文:用paddle和tf实现alexnet跑cifar10
- 感觉对alexnet的理解还不够深入,如果尝试改一下卷积核的尺寸和个数,会对模型产生怎样的影响?为什么会产生这样的影响?对计算心梗会有影响吗?晚上再改一下参数测测。
- 尝试用一下paddle的分布式训练,跑一下inceptionv4---并没有跑 = =,用tf跑的,单机多卡的方式,分布式的还需要再改改程序
- 做完在公司干活到10:45左右的时候突然心脏狂跳,不停的深呼吸,手开始变麻,调节了好久才平静下来,好怕自己会猝死了 = =!立个flag,以后加班不超过10点,10必须回家。我还想多活几年T_T
- 一点感悟:做分布式的框架一定要先想好架构,想清楚各个模块怎么独立化,每个部分的具体工作。然后再跑一个小demo。不能一开始把所有模块写在一个程序里跑成功了就认为可以了。
- Q:一位同行提了个问题:在用tensorflow多线程读取数据时,如果不初始化,则会一直循环输出,线程不终止,why?
- A:string_input_producer函数 里面有个num_epochs决定什么时候抛OutOfRange异常, 默认是cycle无限循环复制模式.
- 我的理解是:我理解的是,在这里初始化的意义相当于一个计数器,如果不初始化就是默认的num_epochs,无限循环,初始化后启动多线程,num_epochs更新后超过一定值就会启动outofrange 就停止所有线程了
- 跑了下tf的vgg,paddle版的vgg11月27日就跑了,结果tf要略好。vgg还是要花时间再好好看看,有很多可以借鉴的思想。
- 发布第七篇博文:用paddle和tf实现vgg,写了第一篇公众号,收获了42个粉丝哈哈,太意外了。
- 做tf的分布式框架好麻烦 - -,快吐血了。写了快一万多行了,愣是这有问题那有问题,跪了。。。。。
- 能不能把所有flags参数写到config里调用??
- 记录一个问题:tf分布式如何实现early-stpping?(SessionRunHook)回家仔细看看
- 一个感悟:如果代码量太大,先剪枝,实现最基本的,其他的属于“同类型”的功能的函数再慢慢加上去,不然看着太多心里烦。
- 好几天没更新了,最近太忙,负载过多,昨天调节好了,今天开始搞
- 都2018了,前段时间一直在敢项目进度。最近参加了paddle组织的比赛,目前排名第二,争取超过第一名哈哈
- 一晃20多天没更新wiki了,最近一个月一直在忙房子的事情,好在都搞定了。昨天晚上写paddle邮件分类的东西都是赶工赶出来的,今天被指出好多纰漏 = =,以后一定把代码和文章打包好了再发。上半年的时间基本上快被预定满了,最多只能再接一个活了,再多绝对绝对受不了了,现在负担就很重了。怕到时候身体扛不住。既然头一个三年计划已经提前完成,周末制定一下下一个三年计划,其实也能预估下一个三年的生活状态,基本上就是忙忙忙,宅宅宅,在家不断敲代码看源码写文章。小哥哥年后也会买房,争取未来三年把一套房的贷款还完,在武汉再买两套房。再关注一下移民的事情。恩,周末好好琢磨琢磨~