- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
目前我正在尝试为我的网络实现弹性传播。我是基于 encog 实现来做这件事的,但有一件事我不明白:
The documentation对于 RPROP 和 iRPROP+ 表示当变化 > 0 时: weightChange = -sign(gradient) * delta
The source code在第 298 行和第 366 行没有减号!
因为我认为两者在某些情况下都是正确的:为什么两者之间存在差异?
关于梯度:我在输出层中使用 tanh 作为事件。这是梯度的正确计算吗?
gradientOutput = (1 - lastOutput[j] * lastOutput[j]) * (target[j] - lastOutput[j]);
最佳答案
在重新阅读相关论文并在教科书中查找后,我认为 encog 的文档在这一点上是不正确的。为什么不通过在源代码中临时添加减号来尝试一下?如果您使用相同的初始权重,鉴于文档是正确的,您应该得到完全相同的结果。但最终,重要的是您如何使用 weightUpdate 变量。如果文档的作者习惯于从权重中减去 weightUpdate 而不是添加它,这将起作用。
编辑 :我重新审视了我原来的答案中关于梯度计算的部分。
首先,这里简要说明如何想象输出层中权重的梯度。首先,您计算输出和目标值之间的误差。
您现在要做的是“责备”前一层中活跃的那些神经元。想象一下输出神经元说“好吧,我这里有一个错误,谁负责?”。负责的是前一层的神经元。根据输出与目标值相比太小或太大,它将根据它们的活跃程度增加或减少前一层中每个神经元的权重。
x 是隐藏层中神经元的激活。
o 是输出神经元的激活。
φ 是输出神经元的激活函数,φ' 是它的导数。
编辑 2 : 更正了下面的部分。添加了反向传播的矩阵样式计算。
每个输出神经元 j 的误差为:
(1) δout, j = φ'(oj)(t - oj)
连接隐藏神经元 i 和输出神经元 j 的权重梯度:
(2) 梯度, j = xi * δout, j
每个隐藏神经元 i 的反向传播误差,权重为 w:
(3) δhid, i = φ'(x)*∑wi, j * δout, j
通过重复应用公式 2 和 3,您可以反向传播到输入层。
写成循环 ,关于一个训练样本:
每个输出神经元 j 的误差为:
for(int j=0; j < numOutNeurons; j++) {
errorOut[j] = activationDerivative(o[j])*(t[j] - o[j]);
}
for(int i=0; i < numHidNeurons; i++) {
for(int j=0; j < numOutNeurons; j++) {
grad[i][j] = x[i] * errorOut[j]
}
}
for(int i=0; i < numHidNeurons; i++) {
for(int j=0; j < numOutNeurons; j++) {
errorHid[i] = activationDerivative(x[i]) * weights[i][j] * errorOut[j]
}
}
activations[0] = input;
for(int i=0; i < numWeightMatrices; i++){
activations[i+1] = activations[i].dot(weightMatrices[i]);
activations[i+1] = activationFunction(activations[i+1]);
}
n = numWeightMatrices;
error = activationDerivative(activations[n]) * (target - activations[n]);
for (int l=n-1; l >= 0; l--){
gradient[l] = activations[l].transposed().dot(error);
if (l > 0) {
error = error.dot(weightMatrices[l].transposed());
error = activationDerivative(activations[l])*error;
}
}
关于neural-network - 弹性传播的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15899579/
我在 AWS Elastic beanstalk 上有一个 tomcat 应用程序,建议 here我正在使用环境属性设置与数据库的 jdbc 连接,此参数包括数据库的用户和密码。问题是,tomcat
经典的Elasticsearch不解析您的日期。也许我开始失明了。我不知道自己在做什么错,我的模板是: "datestamp": {
我想使用 flex 查询在Kibana中创建警报。我正在使用opendistro警报功能。我想检查最近10分钟内cpu.pct字段的所有值是否大于50,如果是,则发出警报。 { "size": 500
我正在使用Kibana中的警报功能,并且想检查字段的最后5个连续值是否超过阈值x,但是如果我在 flex 查询中使用过滤器,则会在前N个聚合之前应用该过滤器。 有没有一种方法可以使用其他选择器或方法在
我们的指数是超标准的。它是平坦的,并使用logstash从oracle / jdbc转储。 我们也使用相当标准的查询语法来查询 flex : { "size": 20, "from"
您好,我正在执行以下查询: { "_source": [ "source1", "source2", "source3", "source4", ], "q
请告诉我正确的方向:) 我有一个任务:通过查询以 flex 搜索方式查找文档,其中可能包含不必要的单词。 我将说明我的意思: 假设我有一些包含单词“ big red car ”的文档(现在它们在索引的
这是我的一份文件可能看起来像的 { "CC":{"colors":["Blue","Green","Yellow"]}, "CN":{"colors":["White"
语境 弹性 6.0.0 我有以下结构: { "age": 24, "blood": 450, "iv": 700, "job": "boss", "damage": "cut,
我可以使文档不可变吗?当文档提交到相同的 id 时,它们是否不会被重写? POST "localhost:9200/index001/_doc/1" // First time it is creat
我正在制作一个图形应用程序,我可以在其中通过拖动多段线的控制点来编辑多段线。但是,我想通过使其具有弹性来使其更易于使用;拖动控制点时,不是移动单个点,我希望也移动该点一定距离内的点,具体取决于“拉”控
我们都知道云计算拥有弹性扩展的特性,所谓的弹性,即云端的可用资源能够随着用户的需求而灵活变化、自由升降,在业务高峰或低谷期,均能匹配适量的资源,既不捉襟见肘、也不过分浪费。弹性云服务器,简单地说,
我有一个索引,其中多个人可以通过他们的姓名+角色分配给一个文档。 到目前为止,我们通过将“人员”添加为嵌套文档并仅将所有相关人员索引到一个文档中来实现搜索。 我们对查询性能不满意,我想尝试从 "peo
我要执行2个不同的批量上传,每次上传的顺序都是完全无法预测的 在一次加载中,我将具有以下字段:SERVER_NAME,OS和PROD_1_VERSION在另一项中,我将具有以下字段:SERVER_NA
如果我有一个索引到Elasticsearch的JSON文档,如下所示: "_source": { "pid_no": 19321, "aggregator_id
我似乎无法按顺序排列 flex 查询的结果。 我将内存利用率统计信息存储在elasticsearch中。文档示例如下所示: { "Component": "ABC", "memUsage"
给定输入“快速的棕色狐狸跳”,我想为单词创建每种可能的 token 组合。因此,示例字符串将被标记为 [ "quick", "quick brown", "quick fox", "quick jum
我基本上是在尝试编写一个查询,它应该在哪里返回文档 学校是“神圣的国际”,成绩是“第二”。 但当前查询的问题在于它没有考虑必须匹配查询部分。即,即使我没有指定学校给我这份文件,因为它不匹配。 查询给了
我正在尝试在Kibana Canvas 中设置日期格式,因此我遵循了此文档: https://www.elastic.co/blog/kibana-canvas-data-table-and-debu
在用 Flex 编写 token 生成器时,我遇到了这个恼人的错误:“无法识别的规则” 我的代码是: /* Keywords */ TYPE int|double|bool|char L
我是一名优秀的程序员,十分优秀!