前言
写在最前, 我把代码和整理的文档放在github上了
https://github.com/Leezhen2014/python_deep_learning
最近由于疫情被困在家,于是准备每天看点专业知识,准备写成博客,不定期发布。
博客大概会写5~7篇,主要是“解剖”一些深度学习的底层技术。关于深度学习,计算机专业的人多少都会了解,知道ConvPool的过程,也看过论文,做过实验或是解决方案。在写的各种卷积网路 时候,有没有问问自己:这些网络到底是怎么“运作”起来的?如果自己要实现一个具备基本功能的神经网络应该怎么去实现?
知道事物的表面现象,不知事物的本质及其产生的原因是一件很可悲的事情,正如鲁迅所说:What I cannot create, I do not understand. 只有亲自实践去创造一个东西,才算真正弄懂一个问题。
本着“知其然,知其所以然”的目的,会尽可能的用Python库和基本的数学知识,创建经典的深度学习网络。
每篇的计划如下:
第一篇介绍numpy库和matplotlib库、读写二进制的方法、pkl等。这些知识会在后面用到,在本篇的最后会以mnist数据集为例,创建处理手写体图片的函数,供后使用。
第二篇介绍感知机。用感知机实现逻辑门、用多层感知机实现复杂逻辑门。
第三篇神经网络的设计与实现。分为上下两部分:
3.1篇增加神经网络的forward。实现激活函数、全连接层的计算、输出层。最后用mnist数据集测试forwarld是否正确;
3.2篇增加神经网络的backward。实现损失函数、梯度、学习算法。最后用mnist数据集测试神经网络的训练。
第四篇引入计算图的思想,用计算图的方式实现乘法层、加法层和激活层。最后用mnist数据集测试这些简单层。
第四篇添加optimization模块。设计实现SGD,momentum,学习率的衰减,adam。 最后用mnist数据集作对比。
第五篇增加一些处理过拟合的方法。实现droupout,权值衰减,。用mnist数据集测试效果
第六篇增加batch-normalization功能。用mnist数据集做测试效果;
第七篇增加conv和pool功能。实现一个lenet-5
前面七篇的代码和博客已经写完了,经过整理以后会陆续发布。就这样吧,加油!