使用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…

坚实原则:依赖倒置原则

到目前为止&#xff0c;我们只研究了单一职责 &#xff0c; 打开/关闭 &#xff0c; liskov替换和接口隔离原则。 依赖倒置是我们要研究的最后一个原理之一。 该原则指出 答&#xff1a;高级模块不应依赖于低级模块。 两者都应依赖抽象。 B.抽象不应依赖细节。 细节应取决于…

python处理中文字符串_python字符串中的中文处理

LeetCode 374&period; Guess Number Higher or LowerWe are playing the Guess Game. The game is as follows: I pick a number from 1 to n. You have to gues ...【HDU】1693 Eat the Treeshttp://acm.hdu.edu.cn/showproblem.php?pid1693 题意:nm的棋盘求简单回路(可以…

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…

功能Java示例 第1部分–从命令式到声明式

函数式编程&#xff08;FP&#xff09;的目的是避免重新分配变量&#xff0c;避免可变的数据结构&#xff0c;避免状态并全程支持函数。 如果将功能性技术应用于日常Java代码&#xff0c;我们可以从FP中学到什么&#xff1f; 在这个名为“ Functional Java by Example”的系列…

python怎样使用各个日期赤纬_python--日期操作

import datetimedatetime有几个常用类:date time datetime timedelta1. 今天日期时间(今天时间)>>> import datetime>>> now datetime.datetime.now()>>> print now2014-06-04 21:08:32.952591(今天日期)>>> print datetime…

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

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

python最短路径例子_Python实现的多叉树寻找最短路径算法示例

本文实例讲述了Python实现的多叉树寻找最短路径算法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;多叉树的最短路径&#xff1a;思想&#xff1a;传入start 和 end 两个 目标值1 找到从根节点到目标节点的路径2 从所在路径&#xff0c;寻找最近的公共祖先节点&#…

零分钟即可在容器开发套件(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…

c++中的引用和python中的引用_【总结】C++、C#、Java、Javascript、Python中引用的区别...

首先分两大阵营&#xff1a;C中引用是一块阵营&#xff0c;C#、Java、Javascript、Python中引用是另一块阵营。之所以这样分是因为同一阵营中引用使用方法基本一样。C引用本质是个常量指针&#xff0c;而其他语言引用本质是个普通指针。也就意味着C的引用一旦初始化(指向确定了…

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

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

javabean 连接mysql_连接mysql的javabean实例+简单分页

连接mysql的javabean实例简单分页rs.getString(user_id)rs.getString(user_name)rs.getString(user_mail)rs.getString(user_adds)int Cint(String cint){try {int n;n Integer.parseInt(cint);return n;}catch (NumberFormatException e) {return 0;}}%>int PageSize5; //设…

java 工厂方法模式_Java中的工厂方法模式

java 工厂方法模式在上一篇有关模板方法模式的文章中 &#xff0c;我展示了如何利用lambda表达式和默认方法 。 在本文中&#xff0c;我将探讨工厂方法模式&#xff0c;并了解如何利用方法引用&#xff0c;这是Java 8中与lambda表达式一起添加的另一项功能。 让我们考虑一个Ve…

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

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

mysql md5版本校验_MySQL查询以名称的md5版本更新所有条目?

为此&#xff0c;您可以使用MD5()。让我们首先创建一个表-mysql> create table DemoTable1887(Password text,HashPassword text);使用插入命令在表中插入一些记录-mysql> insert into DemoTable1887(Password) values(John9089);mysql> insert into DemoTable1887(Pa…

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…

MySQL在哪里看secret_key_K8S 创建和查看secret(九)

yaml中的用户密码敏感信息一般都会采用密码存储采用base64编码进行加密[roothz-95 pv]# echo -n guang | base64emd1YW5nag[roothz-95 pv]# echo -n 1q2w#E$R | base64cat secret.ymalapiVersion: v1kind: Secretmetadata:name: mysecret2data:username: emd1YW5nagpassword: M…