深度学习一:自己写java代码,训练一个神经元
来源:互联网 发布:地图软件 编辑:程序博客网 时间:2024/04/29 22:24
神经网络与深度学习这本书是我学习深度学习的启蒙教材,感兴趣可以到链接出下载。通过一段时间的学习,感觉基本理解了梯度下降算法和反向传播算法,于是尝试着自己写代码来实现神经网络。一开始总是很难的,所以我设计了个非常简单的目标,训练一个神经元。比如我给他输入1,我期望它输出0,这就是一个反相器。我希望它能做到这一点,所以我对他进行训练。
训练一个神经元能简化梯度下降算法和反向传播算法的实现,也能帮助我们更好的理解升经这两个算法。对于初学深度学习的人来说,勇敢的迈出第一步非常的重要,因此,如果你能成功的训练一个神经元,那也意味着你在深度学习的学习中迈出了重要的一步。
关于梯度下降算法和反向传播算法,还是需要你认真阅读推荐的书籍,这两个算法是深度学习的基石,一定要彻底弄懂才行。
如果在网页上代码不太好看,你可以在这里下载源码:
源码
首先定义一个神经元类:
public class NeureCell { private double w = 0; private double b = 0; private double out = 0; private int in = 0; public void setIn(int in){ this.in = in; } public void setWandB(double w,double b){ this.w = w; this.b = b; } public double getW(){return w;} public double getB(){return b;} public double getOut(){ double z = in*w+b; return 1/(1+Math.exp(-z)); }}
使用梯度下降算法训练神经网络
import java.util.Random;public class DeepLearn { public static void main(String[] args) { // TODO Auto-generated method stub NeureCell cell = new NeureCell(); Random random = new Random(); //init w and b double eta = 3;//learn speed cell.setWandB(random.nextDouble(), random.nextDouble()); cell.setIn(1); double a0 = cell.getOut(); double dw = 0.6*eta*a0; double db = 0.6*eta*a0; cell.setWandB(cell.getW()-dw, cell.getB()-db); for(int i=0;i<200;i++){ cell.setIn(1); double ai = cell.getOut(); dw = 0.6*eta*ai; db = 0.6*eta*ai; cell.setWandB(cell.getW()-dw, cell.getB()-db); System.out.println(ai); } }}
结果如下:
可以看到这个输出越来越接近与0了。
这里使用的是最简单的二次代价函数:
反向传播算法可以概括为一下五步:
如果你能理解这五步,那么你就会明白,这点代码完全就是按照这个步骤做了一遍而已。
阅读全文
0 0
- 深度学习一:自己写java代码,训练一个神经元
- 深度学习三:tensorflow,训练一个神经元
- 深度学习二:自己写java代码,识别手写数字
- 从神经元到深度学习
- 从神经元到深度学习
- 深度学习 9. MatConvNet 利用mnist的model来训练自己的data。MatConvNet 训练自己数据(一)。
- 深度学习 caffe 建自己的数据库 训练一个自创卷积神经网络 过程总结
- 深度学习(一)学会用CAFFE训练自己的模型
- 笔记:从神经元到深度学习
- 深度学习(一)——MP神经元模型, BP算法, 神经元激活函数, Dropout
- 神经网络与深度学习(一)——神经元与梯度下降算法
- 自己写的一个用DES加密的java代码
- 深度学习训练技巧(一)
- 如何写一个给自己的框架写一个优雅的Java Config模块(一)
- 深度学习(三) YOLOv2训练自己的数据集
- 深度学习ssd检测模型训练自己的数据集
- 自己写的一点福利代码(一)
- 自己写一个MVC框架(一)
- 苹果App Store提交app审核时EULA(终端用户软件使用条款)的注意事项等政策解读
- EasyUI插件使用案例----将商品拖动到购物车
- caffe 调参理解
- CVBS信号解析过程
- 使用Linq进行数据分组
- 深度学习一:自己写java代码,训练一个神经元
- Error:Failed to find Build Tools revision 24.0.1 <a href="install.build.tools">Install Build Tools 2
- iOS项目之苹果审核被拒
- 干货!java经典面试套路精讲视频教程免费分享!
- CVBS信号解析过程
- UIView CALayer frame,position ,anchorPoint的关系
- Django中使用ifram注意事项
- tomcat配置文件server.xml详解
- linux 的conky新版配置文件 conky.conf