使用Eclipse Deeplearning4j构建简单的神经网络

神经网络导论

深度学习既包含深度神经网络又包含深度强化学习,这是机器学习的子集,而机器学习本身就是人工智能的子集。 广义上讲,深度神经网络执行机器感知,该机器感知从原始数据中提取重要特征,并对每个观察结果做出某种预测。 示例包括识别图像中表示的对象,将模拟语音映射到书面转录,按情感对文本进行分类以及对时间序列数据进行预测。

尽管神经网络是上世纪发明的,但直到最近才引起人们更多的兴奋。 现在已经有了利用神经网络概念的计算能力,它们已被用于在计算机视觉,自然语言处理和强化学习等领域设置新的最新技术成果。 DeepMind的科学家实现了一项众所周知的深度学习成就,他创造了一个名为AlphaGo的计算机程序,该程序在2016年和2017年分别击败了前世界冠军Go选手和现任冠军。 许多专家预测,这一成就将再持续十年。

神经网络有许多种,但是它们如何工作的基本概念很简单。 它们大致基于人脑,由一层或多层“神经元”组成,它们只是传递来自上一层信号的数学运算。 在每一层,对来自上一层神经元的输入进行计算,然后将输出中继到下一层。 网络最后一层的输出将根据任务表示对输入数据的一些预测。 建立成功的神经网络所面临的挑战是找到适用于每一层的正确计算。

神经网络可以处理高维数值和分类数据,并执行诸如回归,分类,聚类和特征提取之类的任务。 通过首先基于数据和任务配置其体系结构,然后调整其超参数以优化神经网络的性能来创建神经网络。 一旦对神经网络进行了充分的训练和调整,就可以将其用于处理新的数据集并返回合理可靠的预测。

Eclipse DeepLearning4j适用的地方

Eclipse Deeplearning4j (DL4J)是一个基于JVM的开源工具包,用于构建,训练和部署神经网络。 它旨在为Java和Scala社区提供服务,并且用户友好,稳定并且与Spark,CUDA和cuDNN等技术很好地集成在一起。 Deeplearning4j还与Keras和TensorFlow等Python工具集成,以将其模型部署到JVM上的生产环境。 它还附带了一组开源库,Skymind将这些开源库捆绑在称为Skymind Intelligence Layer(SKIL)的企业发行版中。 这些库是:

  • Deeplearning4j :神经网络DSL(有助于构建与数据管道和Spark集成的神经网络)
  • ND4J :用于Java的N维数组,一个张量库:“具有C代码和更广泛范围的Eclipse January”。 目标是为各种硬件平台提供张量操作和优化的支持
  • DataVec :ETL库,可矢量化和“张紧”数据。 提取转换负载,并支持通过一系列数据转换连接到各种数据源并输出n维数组
  • libnd4j :用于张量操作的纯C ++库,该库与开源库JavaCPP紧密协作(JavaCPP是由Skymind工程师创建并维护的,但它不属于该项目)。
  • RL4J :与Deeplearning4j集成的JVM上的强化学习。 包括在AlphaGo和A3C中使用的Deep-Q学习。
  • Jumpy :与Numpy集成的ND4J库的Python接口
  • 仲裁器 :通过超参数搜索自动调整神经网络。 使用网格搜索,随机搜索和贝叶斯方法进行超参数优化。
  • ScalNet :Deeplearning4j的Scala API,在外观上类似于Torch或Keras。
  • ND4S :基于ND4J的Scala N维数组。

这是使用DeepLearning4j的一些原因。

您是该领域的数据科学家,或者是Java,Scala或Python项目的学生,并且需要与JVM堆栈(Hadoop,Spark,Kafka,ElasticSearch,Cassandra)集成。 例如,您希望通过多GPU在Spark上扩展神经网络训练。 您需要探索数据,进行和监视将各种算法应用于数据的实验,并在集群上进行训练以快速获取该数据的准确模型。

您是企业环境中的数据工程师或软件开发人员,需要稳定,可重用的数据管道以及对数据的可伸缩且准确的预测。 这里的用例是使用简单易懂的API以编程方式自动处理和分析数据,以确定指定结果。

示例:建立前馈网络

前馈网络是神经网络的最简单形式,也是最早创建的网络之一。 在这里,我们将基于使用月亮数据的示例概述前馈神经网络的示例。 数据位于此处 。

原始数据由具有两个数字功能和两个标签的CSV文件组成。 训练集和测试集位于不同的CSV文件中,训练集中有2000个观察值,测试集中有1000个观察值。 该任务的目的是在给定两个输入特征的情况下预测标签。 因此,我们对分类感兴趣。

我们首先初始化构建前馈神经网络所需的变量。 我们设置了神经网络的超参数,例如学习率和批量大小,以及与它的体系结构相关的变量,例如隐藏节点的数量。

int seed = 123;
double learningRate = 0.005;
int batchSize = 50;
int nEpochs = 100;int numInputs = 2;
int numOutputs = 2;
int numHiddenNodes = 20;final String filenameTrain  = new ClassPathResource("/classification/moon_data_train.csv").getFile().getPath();
final String filenameTest  = new ClassPathResource("/classification/moon_data_eval.csv").getFile().getPath();

因为数据位于两个CSV文件中,所以我们总共初始化了两个CSVRecordReaders和两个DataSetIteratorsRecordReaders会将数据解析为记录格式,而DataSetIterator会将数据以其可以读取的格式馈入神经网络。

RecordReader rr = new CSVRecordReader();
rr.initialize(new FileSplit(new File(filenameTrain)));
DataSetIterator trainIter = new RecordReaderDataSetIterator(rr,batchSize,0,2);RecordReader rrTest = new CSVRecordReader();
rrTest.initialize(new FileSplit(new File(filenameTest)));
DataSetIterator testIter = new RecordReaderDataSetIterator(rrTest,batchSize,0,2);

建立前馈网络

现在已经准备好数据,我们可以使用MultiLayerConfiguration设置神经网络的配置。

MultiLayerConfiguration conf = new NeuralNetConfiguration.Builder().seed(seed).iterations(1).optimizationAlgo(OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT).learningRate(learningRate).updater(Updater.NESTEROVS).list().layer(0, new DenseLayer.Builder().nIn(numInputs).nOut(numHiddenNodes).weightInit(WeightInit.XAVIER).activation(Activation.RELU).build()).layer(1, new OutputLayer.Builder(LossFunction.NEGATIVELOGLIKELIHOOD).weightInit(WeightInit.XAVIER).activation(Activation.SOFTMAX).nIn(numHiddenNodes).nOut(numOutputs).build()).pretrain(false).backprop(true).build();

使用softmax激活函数和负对数似然损失函数,有一个包含20个节点的隐藏层和一个具有两个节点的输出层。 我们还设置了如何初始化神经网络的权重以及神经网络将如何优化权重。 为了使结果可重复,我们还设置了种子。 也就是说,我们使用随机初始化的权重,但是如果需要稍后从同一点开始训练以确认结果,则可以保存它们的随机初始化。

训练和评估前馈神经网络

为了实际创建模型,使用先前设置的配置初始化MultiLayerNetwork 。 然后,我们可以使用训练循环拟合数据; 或者,如果使用MultipleEpochsIterator ,则只需要调用一次fit函数即可训练具有设定时期数的数据。

MultiLayerNetwork model = new MultiLayerNetwork(conf);
model.init();
model.setListeners(new ScoreIterationListener(100)); for ( int n = 0; n < nEpochs; n++) {model.fit( trainIter );
}

数据完成训练后,我们将使用测试集评估模型。 请注意, testIter根据先前设置的批次大小50创建DataSetsEvaluation类将使用正确的标签和预测来计算准确性。 最后,我们可以打印出结果。

Evaluation eval = new Evaluation(numOutputs);
while(testIter.hasNext()){DataSet t = testIter.next();INDArray features = t.getFeatureMatrix();INDArray labels = t.getLabels();INDArray predicted = model.output(features,false);eval.eval(labels, predicted);
}System.out.println(eval.stats());

该示例涵盖了使用MultiLayerNetwork创建简单的前馈神经网络的基础。

  • 要了解更多信息,请参阅我们的O'Reilly书: 深度学习:从业者的方法
  • 并查看Deeplearning4j编程指南

翻译自: https://www.javacodegeeks.com/2017/11/building-simple-neural-network-eclipse-deeplearning4j.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/348468.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql 注入 绕过防火墙_绕过阿里云防火墙继续扫描探测和SQL注入

前言如今的互联网&#xff0c;WAF泛滥的年代&#xff0c;实在让我等脚本小子苦恼ing&#xff0c;尤其是阿里云服务器的自带防护&#xff0c;那不是一般的叫人牙疼&#xff0c;十个站8个站都是阿里云....最近遇到几个站都是阿里云的服务器&#xff0c;比如&#xff1a;泛微e-col…

java创建类的三个步骤_3个简单步骤即可测试Java 8

java创建类的三个步骤即将发布的Java 8版本为Java开发人员带来了许多新功能&#xff0c;但是升级时始终存在代码破裂的风险。 我们都记得Java 7出厂时有一系列非常严重的错误 。 当然&#xff0c;我们所有人都可以帮助避免在Java 8中出现相同的问题。我今天要介绍的方法是使用…

mybatis嵌套查询和嵌套结果有什么区别_Java面试专题之九:Mybatis面试5个大概率被问到的问题...

1、为什么说 Mybatis 是半自动 ORM 映射工具&#xff1f;它与全自动的区别在哪里&#xff1f;Hibernate 属于全自动 ORM 映射工具&#xff0c;使用 Hibernate 查询关联对象或者关联集合对象时&#xff0c;可以根据对象关系模型直接获取&#xff0c;所以它是全自动的。而 Mybati…

使用Pargon-neo进行5G sync相关的测试

前言 Paragon-neo是Calnex旗下的一款测试仪器&#xff0c;主要用于5G的高精度场景下的PTP与SyncE的测试&#xff0c;它可以提供高达100GbE的测试速度&#xff0c;可以用在ITU-T G.8273.2 C/D类边界时钟测试&#xff0c;符合O-RAN的O-DU和O-RU设备&#xff0c;以及设计和部署5G…

常用的光电模块SFP、QSFP等解析

前言 学习记录 BNC 是用来接同轴电缆的接口&#xff0c;好处是降低了信号之间的相互干扰&#xff1b;主要市场是安防行业以及一些使用同轴电缆作为传输介质的令牌以太网。举个例子就是小时候的电视机后面经常能够看见这种线&#xff0c;BNC接头中间有一个凸起来的针&#xff…

零分钟即可在容器开发套件(CDK)上实现云运营

尽管这很有趣&#xff0c;但实际上并不可行&#xff0c;很快就遇到了使用限制。前一段时间&#xff0c; 我逐步完成了在容器中安装称为CloudForms的云管理解决方案。 真正的解决方案是将这个示例放入Red Hat Demo Central集合中&#xff0c;并将其放在基于开放技术的Cloud解决…

NTPv4协议解析

前言 本文的撰写基于RFC5905.NTP 是时间网络控制协议&#xff0c;V4版本相交V3版本&#xff0c;修复了V3存在的一些问题。尤其是NTPV4的拓展时间戳鼓励使用浮动双数据类型&#xff0c;这样使得NTP能够更好的支持1ns的场景&#xff0c;轮询间隔也从上一代的最多1024s拓展到了36…

看完这篇还不会化简卡诺图?你来打我

最通俗易懂的的卡诺图化简教程 首先我们来介绍一下什么是卡诺图&#xff1a; 卡诺图是逻辑函数的一种图形表示。一个逻辑函数的卡诺图就是将此函数的最小项表达式中的各最小项相应地填入一个方格图内&#xff0c;此方格图称为卡诺图。 卡诺图的构造特点使卡诺图具有一个重要性…

几种常见的集成触发器(D、T、JK)

同步RS触发器存在“空翻”现象&#xff0c;即触发器存在多次翻转的现象&#xff0c;空翻破坏了“时序电路按时钟节拍工作&#xff0c;每个时钟脉冲作用下电路的状态只发生一次转换”的基本原则 解决方法&#xff1a;将电平触发改为边沿触发&#xff0c;使得触发器旨在时钟脉冲…

Hashcat从入门到入土(一)

Hashcat的官方是这么介绍自己的 Hashcat is a password recovery tool. It had a proprietary code base until 2015, but was then released as open source software. Versions are available for Linux, OS X, and Windows. Examples of hashcat-supported hashing algorith…

java 语义_Java文件合并变得语义化

java 语义与任何程序员交谈&#xff0c;并询问他应该如何进行合并&#xff1a;“它应该理解代码&#xff0c;对其进行解析&#xff0c;然后根据结构进行合并” –他很可能会说。 而这恰恰是SemanticMerge for Java所做的&#xff1a;它解析要合并的文件&#xff08;加上祖先或…

Apache Pulsar:分布式发布订阅消息系统

Apache Pulsar是一个开源的分布式pub-sub消息传递系统&#xff0c;最初由Yahoo创建&#xff0c;并且是Apache Software Foundation的一部分 。 Pulsar是用于服务器到服务器消息传递的多租户高性能解决方案。 脉冲星的主要功能包括[4]&#xff1a; 对Pulsar实例中的多个集群的…

迟来总比没有好:SSE或服务器发送的事件现在已在JAX-RS中

服务器发送的事件 &#xff08;或简称为SSE &#xff09;是非常有用的协议&#xff0c;它允许服务器通过HTTP将数据推送到客户端。 这是我们的网络浏览器支持的年龄&#xff0c;但令人惊讶的是&#xff0c; JAX-RS规范在很长一段时间内都忽略了这一点。 尽管Jersey提供了适用于…

java 面向对象继承的思想_Java面向对象思想

Java类的定义&#xff1a;成员变量会默认初始化&#xff0c;局部变量不会默认初始化。如何在内存中区分类和对象&#xff1a;♦类是静态的概念&#xff0c;代码区♦对象是new出来的&#xff0c;位于堆内存&#xff0c;类的每一个成员变量在不同的对象中都有不同的值(除了静态变…

java 垃圾回收手动回收_Java垃圾回收(4)

java 垃圾回收手动回收G1&#xff1a;垃圾优先 G1收集器是热点JVM中要实现的最新收集器。 自Java 7 Update 4以来&#xff0c;它一直是受支持的收集器。OracleGC团队也公开表示&#xff0c;他们对低暂停GC的希望是完全实现的G1。 这篇文章来自我之前的垃圾收集博客文章&#xf…

使用正确的垃圾收集器将Java内存使用量降至最低

大小对于软件至关重要。 很明显&#xff0c;与大型整体方法相比&#xff0c;在微服务体系结构中使用小型组件具有更多优势。 最新的Java版本的Jigsaw可帮助分解旧应用程序或从头开始构建新的云原生应用程序。 这种方法减少了磁盘空间&#xff0c;构建时间和启动时间。 但是&am…

java 鼠标画多个圆形_点击鼠标不同的建(左、中、右)画一个不同颜色的圆

[java]代码库import java.awt.Color;import java.awt.Graphics;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import javax.swing.JFrame;public class T1 extends JFrame{int x;int y;Color c;public T1(){this.setSize(600,400);this.setDefaultCl…

通过粘性仙人掌基元进行延迟加载和缓存

您显然知道什么是延迟加载 &#xff0c;对吗&#xff1f; 而且您无疑知道缓存 。 据我所知&#xff0c;Java中没有一种优雅的方法来实现它们中的任何一个。 这是我在Cactoos原语的帮助下为自己找到的。 Matteo Garrone的《 Reality&#xff08;2012&#xff09;》 假设我们需…

java语言编程基础_java语言编程基础

java语言基本要素高级语言如c、c#、java等都有一些共同性的东西&#xff1a;关键字、标识符、运算符、注释、数据类型、常量和变量、语句、函数、数组。高级语言在这些要素上大同小异。Java关键字&#xff1a;一些有特定含义&#xff0c;有专门用途的字符串(keyword)。Java中关…

junit mockito_JUnit和Mockito合作

junit mockito这次&#xff0c;我想对测试框架Mockito进行概述。 毫无疑问&#xff0c;这是用于测试Java代码的最受欢迎的工具之一。 我已经对Mockito的竞争对手EasyMock进行了概述。 这篇文章将基于有关EasyMock的示例应用程序。 我的意思是代表咖啡机功能的类。 使用Mockito…