Encog3 in Java :介绍

2024-08-23 14:48
文章标签 java 介绍 encog3

本文主要是介绍Encog3 in Java :介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Encog手册翻译:介绍 - 一枚码农Encog是一个JAVA和.Net的机器学习框架,最初,Encog仅仅支持神经网络,在后来的版本更新中扩展了其他更多通用的机器学习算法,本教程主要讲解其神经网络算法。icon-default.png?t=M1FBhttp://www.javagame.top/column/1/DXBLOG202201121756175394605/detail.html
Encog是一个JAVA和.Net的机器学习框架,最初,Encog 创建时仅仅支持神经网络,后来的版本扩展了更多通用的机器学习,然而,这本书将重点在主要的神经网络方面,在这本书中学到的大多数技术能够应用到其他的机器学习技术领域 ,随后,这本书将重点在一些 Encog编程的一些领域。

这本书的出版结合了Encog3.0的正式版和应该坚持兼容之后的encog3版本,未来的版本3.x系列将试图以最小程度破坏存在的代码添加一些功能。

0.1 Encog的历史

Encog的第一个版本0.5,正式发布在2008年7月10号,Encog最初的基础包括一些代码用于编写第一个版本的<<介绍神经网络与Java>>,于2005年发布,第二个版本的特色是完全地重新设计了神经网络引擎,成为Encog 0.5版,Encog版本1.0到2.0极大地扩展了神经网络代码远远超出了本书所能介绍的,Encog3.0版本增加了更多正式地支持机器学习方法不仅仅只有神经网络。

这本书将提供一个怎样用Encog去使用神经网络综合性的介绍,对于实际实现神经网络的复杂性,参考 <<介绍神经网络与Java>> 和 <<介绍神经网络与.Net>>,本书探索怎样实现基本的神经网络和创建一个神经网络的内部。

这两本书可以顺序阅读,因为新概念的引入很少重复,这两本书不是彼此的先决条件,这本书将装备你开始和Encog, 如果你能基本了解JAVA编程语言的基础,尤其,你应该熟悉以下:

•   JAVA泛型

•   集合

•   面向对象程序设计

在我们开始测试怎样使用Encog之前,让我们首先来确定Encog擅长解决哪些问题,神经网络是一个编程技术,它们不是每一个编程问题解决的新技术,然而却经常有能力地解决某些编程问题,当然,在这里还有其他的问题,对于神经网络不是很适合

0.2  介绍神经网络

这本书将定义一个神经网络并且怎样去使用它,大多数人,即使非程序员,都听说过神经网络。有很多的科幻小说弦外之音和神经网络有关联,和许多事情一样,科幻小说作家创作了大量的,但是有点错误的关于神经网络是什么的公共概念。

多数的外行人员认为神经网络作为一种“人造大脑”是强大的机器人或者与人类进行智能对话,这个概念的定义更接近人工智能(AI)而不是神经网络,AI寻求创造出真实的智能机器,我不会去浪费几章去解释什么是真真的人类智能,而不是当前的计算机状态,当前的计算机不是一个智能的。

神经网络是AI的一小部分,神经网络,至少它们当前存在,执行非常小,指定的任务,基于计算机的神经网络不是像人脑那样的通用计算设备,神经网络的感知可能是偏斜的,因为大脑本身是一个神经元或者是一个神经网络,这个就产生了一个重要的区别。

人脑更准确的描述为一个生物神经网络(BNN),这本书不是关于生物神经网络的,大多数的文本在这两者间不做区分,在本书中,引用的神经网络意味着人造神经网络。

在生物神经网络和人造神经网络之间有一些基本的相似性,人造神经网络主要的数学结构的灵感来自生物神经网络,一个重要的术语“生物合理性”经常用来描述各种人造神经网络算法,这个术语定义了人造神经网络算法怎样接近于生物神经网络

如前所述,神经网络设计来完成一个小的任务,一个完整的应用程序可能使用神经网络来完成目标的某些部分,整个应用程序不能作为一个神经网络实现,应用程序也许由几个神经网络组成,每个都为一个特定的任务而设计。

神经网络完成模式识别任务非常好, 当一个模式传达的时候,一个神经网络返回模式, 在这个最高级别,这是所有典型的神经网络所做的,一些网络构造将会变化,但是绝大多数的神经网络是这种方式工作的,图一阐述了这个级别的一个神经网络

正如你所看见的,上面的这个神经网络接受一个模式和返回一个模式,神经网络完全同步执行,一个神经网络仅仅当提供了一个输入时才将输出,它不像人脑不同步执行,人脑对输入作出反应,但是它将在任何适合时候产生输出。

0.2.1   神经网络结构

神经网络是由相似的神经元组成,至少,大部分神经网络由输入层和输出层组成,输入模式指定到输入层,然后输出模式从输出层返回,在输入层和输出层之间发生的是一个黑盒子,在书中的这一点上,神经网络的内部结构不用考虑的,有大量的结构定义了输入层和输出层之间的相互作用,在本书的后面,这些结构进行了检测。

输入和输出模式都是两个float型数组,以下是一个示例:

上面的神经网络是三个神经元的输入层和两个神经元的输出层,输入层和输出层的神经元数量不能改变,因此,对于一个特定的神经网络,它的输入层和输出层的元素个数永远不会改变。

使用神经网络,问题的输入必须表示为一个float类型的数组,同样地,问题的解决也必须是一个float类型的数组,这是必要的并且是神经网络唯一的真实值,神经网络拿到一个数组,并且将其转换为第二个,神经网络不循环、调用子程序或者执行任何其他相关的传统程序任务,神经网络识别模式。

一个神经网络很像传统编程里的哈希表,一个哈希表用于将key 映射到 value, 有点像一个字典,下面可以看做是一个哈希表的例子:

这是一个单词和每个单词的定义之间的映射, 就像一个哈希表在任何编程语言里一样,它使用一个字符串的key 任意的一个字符串的value, 输入是字典里的一个key和输出是一个value, 这是大多数神经网络的功能,一个神经网络调用一个BidirectionalAssociative Memory (BAM)实际上允许用户通过value和接受key

哈希表使用keyvalue, 想想模式发送到神经网络的输入层就像哈希表的Key, 同样地,模式从神经网络的输出层返回就像从哈希表返回value,这个哈希表和神经网络之间的比较,然而,神经网络要比哈希表工作要好得多。

如果一个单词不在哈希表中那上面的哈希表会发生什么?例如,传递一个key ‘wrote’,那哈希表将返回null或者在某种程度上表明它无法找到指定的Key, 神经网络不会返回null, 而是找到一个最接近的匹配,它不仅找到最接近的匹配,神经网络还修改输出值来估计缺失值,如果传递一个”wrote”到上面的神经网络,输出可能是’write’, 在这里没有足够的数据为神经网络去修改返回,这里仅仅三个样例,所以你可能从其他的key中得到输出。

上面的映射提出了一个非常重要的点关于神经网络,回想神经网络接受一个float类型的数组和返回另外一个数组,如何将字符串放到神经网络如上图所示?虽然有方法可以做到这一点,它处理数值型数据比处理字符型数据更容易。

一个神经网络的问题,输入必须是float型数组,这是神经网络编程最困难的一个方面,怎样让一个问题转换为一个固定长度的float型数组?最好的方式是通过演示,在本书的例子中都有介绍和探索。

0.2.2   一个简单的例子

大多数基础的有关神经网络提供的例子是XOR运算符,这个XOR运算符是神经网络编程里的hello world, 虽然这本书将描述场景比XOR复杂很多,但这XOR运算符是一个伟大的介绍。

开始,如下的XOR运算符虽然他是一个哈希表,XOR运算符工作类似于AND和OR运算符,对于AND运算符结果要为true, 输入两个都要为ture, 对于OR运算符结果要为ture, 只要输入的其中一个为true, 对于XOR结果要为true, 必须输入的两个彼此不相同,XOR真值表如下:

False XOR False = false;

True XOR False = True;

False XOR True = True;

True XOR True = False;

继续哈希表的例子,上面的真值表可以表示如下:

    [0.0, 0.0] -> [0.0]

    [1.0, 0.0] -> [1.0]

    [0.0, 1.0] -> [1.0]

    [1.0, 1.0] -> [0.0]

 这些映射显示了神经网络的输入和理想期望的输出

0.3  什么时候使用神经网络

定义了神经网络之后,或者当不使用时必须确定他们,知道何时不使用的东西是一样重要的知道如何使用它 ,要了解这些目标,我们将确定Encog擅长解决什么样的问题。

这本书一个重要的目标是解释怎样构造Encog神经网络和何时使用他们,神经网络程序员必须明白哪些问题是适合神经网络解决的和哪些是不适合的,一个神经网络程序员也知道神经网络的有效结构,是适合用于给定的一个问题,这节将首先确定不适合神经网络方案解决的问题。

0.3.1   不适合神经网络方案解决的问题

程序很容易写成流程图的问题不是一个理想的神经网络应用程序,如果你的程序考虑能够很好的定义明确的步骤,那正常的编程技术就已经足够了。

另外一个考虑的标准是程序逻辑是否可能会改变,神经网络的主要特征是学习能力,如果你的算法用来解决的问题是一个不变的业务规则,在这里就没有理由使用神经网络,事实上,神经网络可能会对你的应用程序,如果它试图找到一个更好的解决方案,开始偏离预期的过程,可能会发生意想不到的结果。

最后,神经网络通常是不适合需要明确可追踪路径解决方案的问题,神经网络可以非常有用解决训练的问题,但不能解释其推理,神经网络知道一些东西,因为它被训练去了解它,然而,神经网络无法解释随后得出答案的一系列步骤。

0.3.2   适合神经网络方案解决的问题

虽然神经网络有很多问题不太适合,但也有很多问题,神经网络解决方案非常有用,此外,神经网络通常可以解决问题比传统编程算法用更少的代码,重要的是要明白哪些问题能够使用神经网络方法。

神经网络对于解决那些不能用一系列步骤表示的问题特别有用,这可能包括了模式识别,分类,预测和数据挖掘。

模式识别可能是神经网络最常用的方法,对于这种类型的问题,神经网络已图像,声音或其他数据形式呈现,然后,神经网络试图确定输入数据是否与训练过的模式相匹配。本书的其余部分将研究许多例子如何使用神经网络来识别模式。

分类的过程接近模式识别,一个神经网络训练分类是为了将输入样本分组,这些组也许是模糊的,缺乏明确定义边界的,另外,这些组也许有着相当严格的边界。

0.4   本书的结构

本书开始的第一章, “回归,分类&聚类”.这章介绍了用神经网络执行的主要任务,这些任务不仅仅通过神经网络来完成,也有另外的其他机器学习算法。

神经网络的主要任务之一是识别和提供对数据的洞察,第二章,“获取数据&标准化”,说明怎样在使用神经网络之前处理这些数据,这章将研究一些可能用于神经网络的数据,以及如何使用神经网络规范化和使用这些数据。

Encog包括了一个Encog Workbench的GUI神经网络编辑器,第三章,“使用Encog Workbench”,详细说明此应用程序的最佳方法和用途,Encog Workbench提供了一个能够编辑Encog框架使用的.EG数据文件的一个GUI工具,强大的Encog分析师也能够用来自动执行大量的任务。

接下来就是构造和保存神经网络,第四章,“用JAVA构造神经网络”,说明了使用layer和激活函数怎样创建神经网络,它也将阐述怎样使用平台独立的.EG文件或者标准JAVA序列化这两种方式去保存神经网络。

神经网络必须通过有效的利用训练和这儿有几种方式去执行这个训练,第五章,“传播训练”,说明了怎样使用内置的Encog训练神经网络的传播方法,Encog支持反向传播,弹性传播,曼哈顿更新规则,快速传播和SCG。

第六章,“其他监督训练方法”,说明了Encog支持的其他监督训练算法,这章介绍了模拟退火算法和遗传算法作为Encog神经网络训练技术,第六章也详细说明怎样创建混合训练算法。

Encog不仅仅支持前馈神经网络类型,第七章,“其他神经网络类型”,提供了简要介绍其他几个Encog支持的神经网络类型,第七章描述怎样设置NEAT, ART1和Elman/Jordan神经网络。

神经网络通常使用来预测未来数据的改变,一个常见的用途是预测股市趋势,第八章,“使用时序数据”,将说明怎样使用Encog预测趋势。

图像是最常见的作为神经网络输入使用,Encog包含了易于使用的图像数据和训练神经网络的类,第九章,“使用图像数据”,说明了怎样通过Encog使用图像数据。

最后,第10章,“使用自组织映射”,讲解了Encog通过监督训练到使用无监督训练的扩展,一个自组织映射(SOM)可以用于集群数据。

当你阅读这本书虽然你对Encog框架无疑会有问题,你最好的资源是Heaton Research的论坛,可以在以下URL找到:

http://www.heatonresearch.com/forum

   另外,Encog Wiki, 位于以下的URL

http://www.heatonresearch.com/wiki/Main_Page

这篇关于Encog3 in Java :介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1099689

相关文章

SpringBoot实现RSA+AES自动接口解密的实战指南

《SpringBoot实现RSA+AES自动接口解密的实战指南》在当今数据泄露频发的网络环境中,接口安全已成为开发者不可忽视的核心议题,RSA+AES混合加密方案因其安全性高、性能优越而被广泛采用,本... 目录一、项目依赖与环境准备1.1 Maven依赖配置1.2 密钥生成与配置二、加密工具类实现2.1

在Java中实现线程之间的数据共享的几种方式总结

《在Java中实现线程之间的数据共享的几种方式总结》在Java中实现线程间数据共享是并发编程的核心需求,但需要谨慎处理同步问题以避免竞态条件,本文通过代码示例给大家介绍了几种主要实现方式及其最佳实践,... 目录1. 共享变量与同步机制2. 轻量级通信机制3. 线程安全容器4. 线程局部变量(ThreadL

分布式锁在Spring Boot应用中的实现过程

《分布式锁在SpringBoot应用中的实现过程》文章介绍在SpringBoot中通过自定义Lock注解、LockAspect切面和RedisLockUtils工具类实现分布式锁,确保多实例并发操作... 目录Lock注解LockASPect切面RedisLockUtils工具类总结在现代微服务架构中,分布

Java使用Thumbnailator库实现图片处理与压缩功能

《Java使用Thumbnailator库实现图片处理与压缩功能》Thumbnailator是高性能Java图像处理库,支持缩放、旋转、水印添加、裁剪及格式转换,提供易用API和性能优化,适合Web应... 目录1. 图片处理库Thumbnailator介绍2. 基本和指定大小图片缩放功能2.1 图片缩放的

Spring Boot集成/输出/日志级别控制/持久化开发实践

《SpringBoot集成/输出/日志级别控制/持久化开发实践》SpringBoot默认集成Logback,支持灵活日志级别配置(INFO/DEBUG等),输出包含时间戳、级别、类名等信息,并可通过... 目录一、日志概述1.1、Spring Boot日志简介1.2、日志框架与默认配置1.3、日志的核心作用

破茧 JDBC:MyBatis 在 Spring Boot 中的轻量实践指南

《破茧JDBC:MyBatis在SpringBoot中的轻量实践指南》MyBatis是持久层框架,简化JDBC开发,通过接口+XML/注解实现数据访问,动态代理生成实现类,支持增删改查及参数... 目录一、什么是 MyBATis二、 MyBatis 入门2.1、创建项目2.2、配置数据库连接字符串2.3、入

Springboot项目启动失败提示找不到dao类的解决

《Springboot项目启动失败提示找不到dao类的解决》SpringBoot启动失败,因ProductServiceImpl未正确注入ProductDao,原因:Dao未注册为Bean,解决:在启... 目录错误描述原因解决方法总结***************************APPLICA编

深度解析Spring Security 中的 SecurityFilterChain核心功能

《深度解析SpringSecurity中的SecurityFilterChain核心功能》SecurityFilterChain通过组件化配置、类型安全路径匹配、多链协同三大特性,重构了Spri... 目录Spring Security 中的SecurityFilterChain深度解析一、Security

MySQL常用字符串函数示例和场景介绍

《MySQL常用字符串函数示例和场景介绍》MySQL提供了丰富的字符串函数帮助我们高效地对字符串进行处理、转换和分析,本文我将全面且深入地介绍MySQL常用的字符串函数,并结合具体示例和场景,帮你熟练... 目录一、字符串函数概述1.1 字符串函数的作用1.2 字符串函数分类二、字符串长度与统计函数2.1

SpringBoot多环境配置数据读取方式

《SpringBoot多环境配置数据读取方式》SpringBoot通过环境隔离机制,支持properties/yaml/yml多格式配置,结合@Value、Environment和@Configura... 目录一、多环境配置的核心思路二、3种配置文件格式详解2.1 properties格式(传统格式)1.