Blog

keep thinking, keep foolish

Commits合并 — git squash的使用

使用git squash完成commits合并

在git的使用过程中,为了添加一个feature,通常需要提交多个不同的commits。通常,为了提高git log的美观、可读性,我们需要将一些零散的commits,合并成一个commits。这种做法可以使得最终的git log更为优美。为了合并这些commits,一个常用的git技巧就是rebase和squash。 Commits合并 Git rebase

Understanding Global Average Pooling

不一样的GAP

Golbal Average Pooling 第一次出现在论文Network in Network中,后来又很多工作延续使用了GAP,实验证明:Global Average Pooling确实可以提高CNN效果。 Traditional Pooling Methods 要想真正的理解Global Average Pooling,首先要了解深度网络中常见的pooling方式,以及全...

An Insight into FCN

FCN论文笔记与tensorflow实现

FCN是2015年CVPR的Best Paper,提出了一种End-to-End的 Semantic Segmentation的方法,简称FCN(Fully Convolutional Network)。FCN可以直接使用Segmentation的Ground Truth作为监督信息,通过训练得到一个能够做pixel wise预测的网络。 文章结构 论文概览 分割面临的...

Implement Batch Normalization

基于Eigen实现Batch Normalization-1

上一篇文章详细介绍了Batch Normalization的原理、涉及的数学公式,基于这些内容,我们可以实现一个简单的BN操作。但是在实际应用中,只是实现公式描述的BN是无法满足系统需求的。本文将以作者向dynet贡献BN源代码的经历,详细描述如何基于Eigen实现一个实用的Batch Normalization操作。 文章结构 滑动均值 滑动方差 实现代码 滑...

Batch Normalization

理解Batch Normalization

在传统的机器学习模型中,数据的归一化有助于模型的训练、收敛,同样,归一化这种方式也有利于深度模型的训练,但是鉴于深度网络的层次结构,输入数据的归一化效果很有可能在第一层网络之后就失去了。在这种情况下,针对每一层数据做归一化就尤为重要,但是做法又与传统方式略有不同,具体思想就体现在Batch Normalization这个操作中。 文章结构 归一化 归一...

1x1卷积

1x1卷积的探索

1x1卷积,乍一看上去,似乎没有多少实际意义,但是在实际使用过程中,1x1卷积起到了很大的作用,在resnet、yolo等网络结构中,都出现了1x1卷积操作,本文通过一些资料和笔者平时的实验感受讲述1x1卷积的具体作用。 1x1卷积第一次被引入是在Network in Network的工作中,在该工作中,作者使用MLPConv来代替了传统卷积中的线性组合操作,使得整个网络在增加较少...

dynet初探

动态神经网络库dynet初探

动态深度网络愈发受到业内关注,16年年末和17年年初,先后有dynet、pytorch和TensorFlow Flod三个动态深度框架发布。笔者从16年10月份开始关注dynet,逐步成为该项目的contributor,对这个深度框架整体设计和细节实现都较为了解。dynet虽然代码量较少,但是具备一个现代深度学习框架应有的诸多特定:动态结构、计算流图等。本篇即在笔者的源码阅读心得基础上...