• 分享以下JAVA深度学习 2016-03-21 09:33:10
    java"] import java.util.Random; public class BpDeep { public double[][] layer;// 神经网络各层节点 public double[][] layerErr;// 神经网络各节点误差 public double[][][] layer_weight;// 各...

    import java.util.Random;

    public class BpDeep {
    public double[][] layer;// 神经网络各层节点
    public double[][] layerErr;// 神经网络各节点误差
    public double[][][] layer_weight;// 各层节点权重
    public double[][][] layer_weight_delta;// 各层节点权重动量
    public double mobp;// 动量系数
    public double rate;// 学习系数

    public BpDeep(int[] layernum, double rate, double mobp) {
    this.mobp = mobp;
    this.rate = rate;
    layer = new double[layernum.length][];
    layerErr = new double[layernum.length][];
    layer_weight = new double[layernum.length][][];
    layer_weight_delta = new double[layernum.length][][];
    Random random = new Random();
    for (int l = 0; l < layernum.length; l++) {
    layer[l] = new double[layernum[l]];
    layerErr[l] = new double[layernum[l]];
    if (l + 1 < layernum.length) {
    layer_weight[l] = new double[layernum[l] + 1][layernum[l + 1]];
    layer_weight_delta[l] = new double[layernum[l] + 1][layernum[l + 1]];
    for (int j = 0; j < layernum[l] + 1; j++)
    for (int i = 0; i < layernum[l + 1]; i++)
    layer_weight[l][j][i] = random.nextDouble();// 随机初始化权重
    }
    }
    }

    // 逐层向前计算输出
    public double[] computeOut(double[] in) {
    for (int l = 1; l < layer.length; l++) {
    for (int j = 0; j < layer[l].length; j++) {
    double z = layer_weight[l - 1][layer[l - 1].length][j];
    for (int i = 0; i < layer[l - 1].length; i++) {
    layer[l - 1][i] = l == 1 ? in[i] : layer[l - 1][i];
    z += layer_weight[l - 1][i][j] * layer[l - 1][i];
    }
    layer[l][j] = 1 / (1 + Math.exp(-z));
    }
    }
    return layer[layer.length - 1];
    }

    // 逐层反向计算误差并修改权重
    public void updateWeight(double[] tar) {
    int l = layer.length - 1;
    for (int j = 0; j < layerErr[l].length; j++)
    layerErr[l][j] = layer[l][j] * (1 - layer[l][j]) * (tar[j] - layer[l][j]);
    while (l-- > 0) {
    for (int j = 0; j < layerErr[l].length; j++) {
    double z = 0.0;
    for (int i = 0; i < layerErr[l + 1].length; i++) {
    z = z + l > 0 ? layerErr[l + 1][i] * layer_weight[l][j][i] : 0;
    layer_weight_delta[l][j][i] = mobp * layer_weight_delta[l][j][i]
    + rate * layerErr[l + 1][i] * layer[l][j];// 隐含层动量调整
    layer_weight[l][j][i] += layer_weight_delta[l][j][i];// 隐含层权重调整
    if (j == layerErr[l].length - 1) {
    layer_weight_delta[l][j + 1][i] = mobp * layer_weight_delta[l][j + 1][i]
    + rate * layerErr[l + 1][i];// 截距动量调整
    layer_weight[l][j + 1][i] += layer_weight_delta[l][j + 1][i];// 截距权重调整
    }
    }
    layerErr[l][j] = z * layer[l][j] * (1 - layer[l][j]);// 记录误差
    }
    }
    }

    public void train(double[] in, double[] tar) {
    double[] out = computeOut(in);
    updateWeight(tar);
    }

    }


    测试找到其它点的类别

    import java.util.Arrays;

    public class BpDeepTest {
    public static void main(String[] args) {
    // 初始化神经网络的基本配置
    // 第一个参数是一个整型数组,表示神经网络的层数和每层节点数,比如{3,10,10,10,10,2}表示输入层是3个节点,输出层是2个节点,中间有4层隐含层,每层10个节点
    // 第二个参数是学习步长,第三个参数是动量系数
    BpDeep bp = new BpDeep(new int[] { 2, 10, 2 }, 0.15, 0.8);
    // 设置样本数据,对应上面的4个二维坐标数据
    double[][] data = new double[][] { { 1, 2 }, { 2, 2 }, { 1, 1 }, { 2, 1 } };
    // 设置目标数据,对应4个坐标数据的分类
    double[][] target = new double[][] { { 1, 0 }, { 0, 1 }, { 0, 1 }, { 1, 0 } };
    // 迭代训练5000次
    for (int n = 0; n < 5000; n++)
    for (int i = 0; i < data.length; i++)
    bp.train(data[i], target[i]);
    // 根据训练结果来检验样本数据
    for (int j = 0; j < data.length; j++) {
    double[] result = bp.computeOut(data[j]);
    System.out.println(Arrays.toString(data[j]) + ":" + Arrays.toString(result));
    }
    // 根据训练结果来预测一条新数据的分类
    double[] x = new double[] { 1, 4 };
    double[] result = bp.computeOut(x);
    System.out.println(Arrays.toString(x) + ":" + Arrays.toString(result));
    }
    }
    展开全文
  • 深度学习,人工智能今天已经成了IT界最流行的词,而tensorflow,phython又是研究深度学习神经网络的热门工具。tensorflow是google的出品,而phython又以简练的语法,独特的代码结构和语言特性为众多数据科学家和AI...
  • 25个JAVA 机器学习工具 2016-12-28 16:13:44
    25个JAVA机器学习工具
  • 项目线上平台是用java编写的web应用程序,而深度学习使用的是python语言,这就涉及到了在java代码中调用python语言的方法。  为了能在java应用中使用python语言训练的算法模型,我在网上找了很久。我大概找到了三...
  • 虽然在机器学习中,Python是人工智能从业者使用最多的编程语言,但是,Java 在项目开发中仍然发挥着不可替代的作用,而且许多流行的机器学习框架本身就是 Java编写的。Python 的资料到处都是,而 Java 相关的资料就...
  • 作为开发人员,我们习惯从用命令或函数的角度来思考问题。程序由任务组成,每个任务都...本教程不是教你从头开始编写神经网络的教程,而是介绍结合Java代码的神经网络。本文主要内容是首先介绍神经网络的发展从McCul
  • 实际上,机器学习包含深度学习深度学习只是机器学习的研究领域之一。深度学习是一个交叉学科,涉及到神经网络、人工智能、图建模、最优化理论、模式识别和信号处理等多学科领域知识。硬件计算能力的升级使得深度...
  • 主流深度学习框架对比 2017-06-21 13:37:41
    主流深度学习框架对比
  • Apache HTTPClient Tutorial 深度学习(二) 对于HTTP连接的管理 从一个主机到另一个主机之间建立连接的过程相当复杂并且涉及到两个端点之间的多个交换,这可能相当耗时的开销。特别是对于小型HTTP消息,握手连接...
  • deeplearning4j这是一个用Java实现的深度学习类库。 网址: https://deeplearning4j.org 问题和数据集Minist是一个每个学过机器学习的童鞋都熟悉的类库。这个数据集包含70,000个手写数字的图片。每张图片为28*28...
  • 那个时候没怎么写Java代码,所以根本就没有听说过ConcurrentHashMap,只知道面试的时候就记住这句话就行了…至于为什么是线程安全的,内部怎么实现的,通通不了解。 今天我们将深入剖析一个比Hash
  • 深度学习的复杂性和难点主要体现在神经网络模型的数学推导、神经网络模型的优化,以及如何构建一个优秀的深度学习模型解决实际问题。 针对这些难点,特别推出了本达人课,希望通过课程内容的学习,大家可以扫清学习...
  • 本文将告诉你学习Java需要达到的30个目标,学习过程中可能遇到的问题,及学习路线。希望能够对你的学习有所帮助。对比一下自己,你已经掌握了这30条中的多少条了呢? 路线 Java发展到现在,按应用来分主要分为三大...
  • 上一章写到Java 调用 Python 方法学习的三种方法,这里强调第三种方法。第三种方法本质上和第二种方法是一样的,都是应用到 Runtime.getRuntime().exec() 去执行文件。要深度理解这种方法,首先要先理解一下...
  • 目前市面上主流深度学习框架近十余种,每种框架各具特色。如何选择合适的深度学习框架?本篇对主流深度学习框架进行综合比较,帮助大家理清思路。本篇比较指标包括:安装成本、代码理解程度、API丰富程度、模型丰富...
  • 深度学习_工具 2017-11-02 16:26:26
    深度学习:Tensorflow, Theano, Keras库的安装使用及特点介绍
  • Github十大深度学习项目 2016-07-13 22:36:08
    Github十大深度学习项目
  • 基于深度学习分词 2018-01-17 16:45:13
    深度学习在NLP中的中文分词
  • 搭建深度学习后台服务器 2018-09-24 09:51:03
        本篇文章的原创为国外的一篇文章(一个可扩展的Keras深度学习REST API),链接为: ...我们的Keras深度学习REST API将能够批量处理图像,扩展到多台机器(包括多台web服务器和Redis实例),并在负载...
  • 其他文章参考链接 ... 把java项目打包为jar、war 目录 把java项目编译后的代码打包为jar(不包含第三方依赖jar) 把java项目编译后的代码打包为war(包含第三方依赖jar) 把java项目编...
1 2 3 4 5 ... 20
收藏数 47,043
精华内容 18,817
热门标签