Python 实现深度学习
前言
写在最前, 我把代码和整理的文档放在github上了
https://github.com/Leezhen2014/python_deep_learning
最近由于疫情被困在家,于是准备每天看点专业知识,准备写成博客,不定期发布。
博客大概会写5~7篇,主要是“解剖”一些深度学习的底层技术。关于深度学习,计算机专业的人多少都会了解,知道Conv\Pool的过程,也看过论文,做过实验或是解决方案。在写的各种卷积网路 时候,有没有问问自己:这些网络到底是怎么“运作”起来的?如果自己要实现一个具备基本功能的神经网络应该怎么去实现?
知道事物的表面现象,不知事物的本质及其产生的原因是一件很可悲的事情,正如鲁迅所说: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
前面七篇的代码和博客已经写完了,经过整理以后会陆续发布。就这样吧,加油!
呼呼,终于抽时间把随笔上传完了;
这里给出传送门:
开篇: https://www.cnblogs.com/greentomlee/p/12314064.html
基础知识介绍: https://www.cnblogs.com/greentomlee/p/12314915.html
神经网络的forward实现: https://www.cnblogs.com/greentomlee/p/16686539.html
计算图的实现:https://www.cnblogs.com/greentomlee/p/16686711.html
神经网络的backward的实现: https://www.cnblogs.com/greentomlee/p/16686684.html
基于计算图的激活层实现: https://www.cnblogs.com/greentomlee/p/16686729.html
基于计算图的affine层实现: https://www.cnblogs.com/greentomlee/p/16686743.html
基于计算图构建损失函数、神经网络:https://www.cnblogs.com/greentomlee/p/16686752.html
基于计算图的optimization的实现:https://www.cnblogs.com/greentomlee/p/16686799.html
过拟合的解决方法和实现:https://www.cnblogs.com/greentomlee/p/16686808.html
基于计算图的batch norm实现: https://www.cnblogs.com/greentomlee/p/16686823.html
卷积的实现与优化(img2ol):https://www.cnblogs.com/greentomlee/p/16686862.html
池化层的实现:https://www.cnblogs.com/greentomlee/p/16686936.html
基于计算图的卷积神经网络的实现与可视化:https://www.cnblogs.com/greentomlee/p/16686940.html