- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我正在尝试将一些人工神经网络与 Ruby 结合使用,我尝试了一些 gems(ruby-fann、Ai4r),当我在一些测试输入上运行经过训练的网络时,它们都返回相同的结果 [1.0, 1.0] ,但在训练数据中,所有输出都在 100 左右。我有 10 个输入神经元和 2 个输出。我尝试了不同的网络配置,期望错误,具有不同的层数和不同的神经元数量。在训练 ruby-fann 的神经网络时,我得到了这个:
1. Current error: 10034.23571597 Bit fail: 1938
100. Current error: 9937.62571597 Bit fail: 1938
之后所有的错误和失败都是一样的。这是我的代码:
inputs_to_learn = []
outputs_to_learn = []
some cycle:
inputs_to_learn.push([i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,])
outputs_to_learn.push([o1, o2])
train = RubyFann::TrainData.new(:inputs=>inputs_to_learn, :desired_outputs=>outputs_to_learn)
fann = RubyFann::Standard.new(:num_inputs=>10, :hidden_neurons=>[30, 30, 30, 30], :num_outputs=>2)
fann.train_on_data(train, 1000, 100, 0.5)
result = fann.run([100, 100, 95, 105, 95, 105, 95, 105, 95, 105])
所以问题是,如果训练数据是数字的 100 倍,为什么我得到 1.0。
最佳答案
构建神经网络时有很多选项可用。一个重要的选择是将传递函数应用于所有输入的总和乘以每个神经元的权重。这也可以称为激活函数。
这主要影响你的输出层。对于您的网络,输出中不可能出现 100 的值,因此网络无法正确学习它们。
使用 logistic 函数(或 sigmoid)的网络很常见,它的输出总是在 0.0 和 1.0 之间。对于某些 NN 库,这可能是您唯一的选择。
您有两个基本选择来改善您的网络收敛:
1) 阅读您正在使用的库的文档,看看是否可以有一个线性输出层(即不应用传递函数)。如果您尝试在连续变量上创建回归模型,出于其他原因,这可能是一个不错的选择。
2) 缩放输出变量以适应 0.0..1.0 的可用输出范围。您需要将训练数据映射到该范围,然后在解释输出时反转该映射,使用网络获取新的输入数据。
如果我没记错的话,FANN 以及 ruby-fann 在神经元类型和现代神经网络的其他特征(例如正则化、各种“聪明的”批处理学习技巧等)方面的选择非常有限。我认为可能没有 - 在这种情况下,您唯一的选择是缩放训练目标以适应范围 0..1
。但是,从您的评论中我可以看出 there are a few methods available to set activation functions .
为了获得最佳性能,理想情况下,您还应该根据训练数据缩放输入。通常,您将它们归一化为在训练集上均值为 0.0,标准差为 1.0(并且从该点开始对所有输入使用相同的偏移量和乘数),尽管将范围限制为 0.0..1.0 或 -1.0..1.0 也很常见.
关于ruby - 使用 Ruby 的人工神经网络,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29330411/
这个问题已经有答案了: How does Google reCAPTCHA v2 work behind the scenes? (5 个回答) 已关闭 8 年前。 我知道评估是人类用户正在使用您的网
根据以下链接,Artifactory AQL 允许通过 REST API 仅返回感兴趣的字段来“显示特定字段”。 https://www.jfrog.com/confluence/display/RT
我想制作一个比应有的大得多的虚拟 Win32 EXE 文件。所以默认情况下,样板 Win32 EXE 文件为 80 KB。我想要一个 5 MB 的空间来测试其他一些实用程序。 第一个想法是添加资源,但
这个问题已经在这里有了答案: 已关闭10年。 Possible Duplicate: Relational database design question - Surrogate-key or Na
我正在尝试在构建作业中生成一个 JSON 构建信息文件以上传到 Artifactory 并在两个工具之间创建可跟踪性。然而,常规的 Jenkins JSON API 文件设计不正确,因此我需要在运行作
当您通过现有 Artifactory 将 Artifactory 部署到 Artifactory 时,它不会将其与现有 Artifactory 所具有的构建相关联。 例如:如果您使用 Jenkins
我是一名优秀的程序员,十分优秀!