问题标签 [encog]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - Unity中的Encog dll?
我想将 Encog 实现到 Unity。当我将 dll 放入资产中时,不会发生错误。我什至可以毫无错误地创建新的神经网络。
当我将 XOR 示例粘贴到脚本时,出现如下所示的错误。我在 Google 上搜索了它与 Encog 使用 Unity 单声道行为中未涵盖的 C# 部分的某种关联。
有人说我应该使用 net framework 3.5 构建的 dll,但是当我尝试在 Visual Basic 中加载解决方案文件时,我又遇到了类似这样的错误:
我尝试修改 encog 源中包含的 build.bat 以便它使用 3.5 框架的路径:C:\Windows\Microsoft.NET\Framework64\v3.5\msbuild (编译时没有错误/警告)但是当我尝试使用这个 dll 统一,我得到与通常分布在 encog 站点上的 dll 相同的错误。
尝试使用 XOR 保护示例脚本时出现统一错误
machine-learning - 神经网络输出变化不大
我在前馈神经网络上有 20 个输出神经元,为此我已经尝试过改变隐藏层的数量和每个隐藏层的神经元数量。在测试时,我注意到虽然输出并不总是完全相同,但它们因测试用例而异,尤其是在彼此之间。它似乎在每个测试用例上输出几乎(在 0.0005 内,取决于初始权重)相同的输出;最高的永远是最高的。是否有一个原因?
注意:我使用的是前馈神经网络,具有弹性和常见的反向传播,分离训练/验证/测试和训练集之间的改组。
更新:我正在使用网络将 4 个输入的模式分类为 20 个输出可能性之一。我有 5000 个训练集、800 个验证集和 1500 个测试集。轮数可能因我正在做的事情而异,在我当前的训练案例中,训练错误似乎收敛得太快(低于 20 个 epoch)。但是,我注意到在其他时间误差会在 1000 个时期内减少时这种非方差。我还调整了常规传播的学习率和动量。弹性传播不使用学习率或动量进行更新。这是使用 Encog 实现的。
validation - 使用 Encog 正确训练和验证
我认为我对 Encog 做错了什么。在我见过的所有例子中,他们只是简单地训练直到达到某个训练错误,然后打印结果。什么时候计算梯度并更新隐藏层的权重?这是否都包含在 training.iteration() 函数中?这是没有意义的,因为即使我的程序中的 TRAINING 错误不断减少,这似乎意味着权重正在发生变化,但我还没有通过网络运行验证集(我在构建时断开并与训练集分离)开始时的数据)以确定验证误差是否仍然随着训练误差而减小。
我还将验证集加载到训练器中并使用 compute() 通过网络运行它,但验证错误始终与训练错误相似 - 所以很难判断它是否与训练错误相同。同时,测试命中率低于 50%(不学习时预期)。
我知道有很多不同类型的反向传播技术,尤其是使用梯度下降和弹性反向传播的常见技术。我们希望自己手动更新网络的哪一部分?
c# - 如何使用 C# Encog 识别数组模式
我制作了一个基于 Encog 的 ANN 来识别材料的光谱。我训练网络将更多频谱传递到矩阵中。例子:
每个向量都有 10000 个元素,训练后我想识别从传感器采集传递的材料之一。查询encog网络的功能是什么?
更新
这是识别功能:
以及从理想输出中检索最接近值输出的函数:
在这种模式下工作是否正确?谢谢
neural-network - Encog - 使用混合神经网络
当达到局部最小值时,将模拟退火与前馈神经网络结合使用与简单地重置权重(并将隐藏层放入新的误差谷)有何不同?FFNN 使用模拟退火作为一种更系统的方法来移动权重以找到全局最小值,因此只有一次迭代每次验证误差相对于训练误差开始增加时执行...缓慢移动当前位置穿过误差函数?在这种情况下,模拟退火独立于前馈网络,而前馈网络依赖于模拟退火输出。如果不是,并且模拟退火直接依赖于 FFNN 的结果,我看不出模拟退火训练器将如何接收有关如何更新其自身权重的信息(如果这有意义的话)。其中一个例子提到了一个循环(多次迭代),这不符合我的第一个假设。
我查看了不同的示例,其中使用了 network.fromArray() 和 network.toArray(),但我只看到了 network.encodeToArray() 和 network.decodeFromArray()。将权重从一种类型的网络转移到另一种类型的最新方法(v3.2)是什么?使用遗传算法等是否相同?
c# - 具有自定义误差函数的神经网络
我正在开发一个使用前馈网络的预测应用程序。我遇到的问题是,我想预测的数据大多是趋势数据。因此,我正在尝试开发的模型如下:
其中x 是输入向量,f(x) 是神经网络,g(t) 是一些随时间变化的趋势函数(即线性、指数)。
最直接的方法是修改误差函数,因此它将包括趋势:
据我了解,解决方案在理论上非常简单,因为根据模型参数(神经网络权重 + 趋势模型参数)的梯度可以计算为:
我认为,使用神经网络优化技术来搜索 NN 和趋势,并以与更新神经权重相同的方式更新趋势模型参数,在理论上没有问题。
问题是,我没有管理如何在 Encog 中做到这一点。学习规则很难理解,因为它们被写得越快越好。我也认为,Encog 中的神经网络结构是固定的,所以仅仅扩展参数向量并重写误差函数和梯度公式并不是那么简单。
java - 带有 Encog 库的遗传算法需要数小时来训练并且不准确?
我在研究中使用 Encog 2.4.0 和 Java 来评估字体数字 (0-9) 识别中的反向传播和遗传算法。我正在使用 JavaCV 将我的数字(图像)处理为 0 和 1 的文本文件,每一行代表一个字体图像图像。每个字体(行)有 256 个属性(0 或 1)。我的网络输入节点号是 256,输出节点是 10(类),我在我的网络中使用 sigmoid 激活函数。我的输出也归一化为 0 和 1(例如 1000000000 表示 0,0100000000 表示 1,依此类推直到 9)。使用不同的训练集(100 到 700 个样本)和测试集(50 到 300)进行 11 次测试运行,具有不同的学习率和动量参数,我对反向传播的准确性和速度(10 秒到< 4 分钟)。但不幸的是 :
网络输入和输出结构类似于 XOR 示例。在 XOR 中,输入是 4 X 2 的数组,输出是 4 X 1。
我的是:输入的“样本数”X 256,输出的“样本数”X 10。
任何人都可以阐明我要去哪里错了吗?
谢谢,霍斯
android - 移动设备上的外部 C# 库
是否可以在为 iOS 和 Android 编译的统一项目中使用外部 C# 库?
在我的情况下,我需要在我的游戏中使用encog库,我会在翻译原生 iOS/Android 代码时遇到问题吗?
java - Encog:权重不断增加
我正在尝试使用 Encog 库训练神经网络。
数据集(约 7000 个示例)在拆分(分为训练(60%)、交叉验证(20%)和测试(20%))之前进行了线性归一化,如下所示:
目标(理想)数据集(也是线性归一化的)如下所示:
我像这样初始化网络:
我使用ResilientPropagation
培训师(也尝试Backpropagation
过):
在训练过程中,训练者报告的错误一般在减少。完成训练后,我转储重量:
它们通常要么非常大,要么非常小。对于 sigmoid,它最终会得到收敛到某个数字的预测,例如上面的权重(经过 500 次迭代后得到)给了我:
网络或训练配置似乎有问题。如果我的网络具有低方差,至少它会产生一个在目标范围内的结果。如果它遭受高方差,它将匹配目标。而现在,它完全没有达到目标。
即使预测很差,为什么错误会减少并且变得相当低?有人在我上面的例子中看到明显的错误吗?我对神经网络还不是很有经验。
machine-learning - Reducing the number of output neurons
I am trying to train a neural network to control a characters speed in 2 dimensions. x and y between -1 and 1 m/sec. Currently I split the range into 0.1 m/sec intervals so I end up with 400 output neurons (20 x values * 20 y values) if I increase the accuracy to 0.01 I end up with 40k output neurons. Is there a way to reduce the number of output neurons?