- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在看书:
Introduction to Neural Networks for C# Second Edition by Jeff Heaton
特别是有关 Hopefield 网络的章节。他解释了如何计算给定 bool 数组作为模式的贡献矩阵。
例如给定以下模式 0101
,相应的贡献矩阵(权重)为:
0 -1 1 -1
-1 0 -1 1
1 -1 0 -1
-1 1 -1 0
识别模式的过程遵循这个规则:
We must now compare those weights with the input pattern of 0101. We will sum only the weights corresponding to the positions that contain a 1 in the input pattern. The results of the activation of each neuron are shown below.
N1 = -1 + -1 = -2
N2 = 0 + 1 = 1
N3 = -1 + -1 = -2
N4 = 1 + 0 = 1These values are meaningless without an activation function. The activation function used for a Hopfield network is any value greater than zero, so the following neurons will fire.
N1 activation result is –2; will not fire (0)
N2 activation result is 1; will fire (1)
N3 activation result is –2; will not fire(0)N4 activation result is 1; will fire (1)
As you can see, we assign a binary value of 1 to all neurons that fired, and a binary value of 0 to all neurons that did not fire. The final binary output from the Hopfield network will be 0101. This is the same as the input pattern.
此外他还说:
If we also want to recognize 1001, then we would calculate both contribution matrixes and add the results to create the connection weight matrix
所以我计算第二个贡献矩阵:
0 -1 -1 1
-1 0 1 -1
-1 1 0 -1
1 -1 -1 0
并添加两个矩阵:
0 -2 0 0
-2 0 0 0
0 0 0 -2
0 0 -2 0
很明显(遵循前面的规则)最后一个矩阵不能识别前面的任何模式。这怎么可能?哪里出错了?
编辑:(添加了作者提供的示例)
考虑到 example提供的两种模式是:
1100
-> [1 1 -1 -1]
0 1 -1 -1
1 0 -1 -1
-1 -1 0 1
-1 -1 1 0
1000
-> [1 -1 -1 -1]
0 -1 -1 -1
-1 0 1 1
-1 1 0 1
-1 1 1 0
添加:
0 0 -2 -2
0 0 0 0
-2 0 0 2
-2 0 2 0
乘以[1 1 -1 -1]
:
4 0 -4 -4
乘以[1 -1 -1 -1]
:
4 0 -4 -4
在这两种情况下,识别出的模式都是 1000
(缺少 1100
)。因此,这里有些东西不起作用。
最佳答案
这个来源看起来不太好。例如,它使用术语“逆”而不是“转置”。还错误地描述了用于召回模式的算法。幸运的是,如果您查看它们的实现,它似乎工作正常(尽管它也是低质量的代码)。
不同之处在于,当您呈现一个向量以记忆其模式时,您还应该将其转换为双极性形式,然后计算与权重矩阵每一列的点积。因此,在您的示例中,当您呈现您计算的向量 1001
时:
|0 -2 0 0|
[1 -1 -1 1] * |-2 0 0 0| = [2 -2 -2 2]
|0 0 0 -2|
|0 0 -2 0|
应用阈值函数后,它会产生正确的结果:1001
。对于第二个向量,0101
:
|0 -2 0 0|
[-1 1 -1 1] * |-2 0 0 0| = [-2 2 -2 2]
|0 0 0 -2|
|0 0 -2 0|
这也给出了正确的结果:0101
。
编辑:
在您的第二个示例中,您似乎已经达到了 Hopfield 网络功能的极限。首先,您呈现的模式只有一点点不同,这使得它们很难区分。结合 Hopfield 网络的容量据说约为 0.138 * n
( link ) 的事实,n
是神经元的数量似乎可以解释这个问题.
其他来源,例如 this one (第 6 章)提供了 n/2 * log(n)
的理论界限——“几乎所有模式”都可以被无误地检索。在此链接中,您还可以找到其他学习规则。你可以找到另一个简单的例子 here .
关于c# - 霍普菲尔德贡献矩阵模式识别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20828070/
假设我有两个矩阵,每个矩阵有两列和不同的行数。我想检查并查看一个矩阵的哪些对在另一个矩阵中。如果这些是一维的,我通常只会做 a %in% x得到我的结果。 match似乎只适用于向量。 > a
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 9 个月前。 Improv
我只处理过 DirectX 矩阵 我读过一些文章,说不能将 DirectX 矩阵数学库用于 openGL 矩阵。 但我也读过,如果你的数学是一致的,你可以获得类似的结果。那只会让我更加困惑。 任何人都
我编写了一个C++代码来解决线性系统A.x = b,其中A是一个对称矩阵,方法是首先使用LAPACK(E)对角矩阵A = V.D.V^T(因为以后需要特征值),然后求解x = A^-1.b = V^T
我遇到了问题。我想创建二维数组 rows=3 cols=2我的代码如下 int **ptr; int row=3; int col=2; ptr=new int *[col]; for (int i=
我有一个 3d mxnxt 矩阵,我希望能够提取 t 2d nxm 矩阵。在我的例子中,我有一个 1024x1024x10 矩阵,我想要 10 张图像显示给我。 这不是 reshape ,我每次只需要
我在 MATLAB 中有一个 3d 矩阵 (n-by-m-by-t) 表示一段时间内网格中的 n-by-m 测量值.我想要一个二维矩阵,其中空间信息消失了,只剩下 n*m 随着时间 t 的测量值(即:
作为一个简化的示例,我有一个 3D numpy 矩阵,如下所示: a = np.array([[[1,2], [4,np.nan], [7,
作为一个简化的示例,我有一个 3D numpy 矩阵,如下所示: a = np.array([[[1,2], [4,np.nan], [7,
使用 eigen2 , 并给定一个矩阵 A a_0_0, a_0_1, a_0_2, ... a_1_0, a_1_0, a_1_2, ... ... 和一个矩阵B: b_0_0, b_0_1, b_
我想知道如何获得下面的布局。 在中型和大型设备上,我希望有 2 行和 2 列的布局(2 x 2 矩阵)。 在小型(和超小型)设备上或调整为小型设备时,我想要一个 4 行和 1 列的矩阵。 我将通过 a
有什么方法可以向量化以下内容: for i = 1:6 te = k(:,:,:,i).*(c(i)); end 我正在尝试将 4D 矩阵 k 乘以向量 c,方法是将其
如何从填充有 1 和 0 的矩阵中抽取 n 个随机点的样本? a=rep(0:1,5) b=rep(0,10) c=rep(1,10) dataset=matrix(cbind(a,b,c),nrow
我正在尝试创建一个包含 X 个 X 的矩阵。以下代码生成从左上角到右下角的 X 对 Angular 线,而不是从右上角到左下角的 X 对 Angular 线。我不确定从哪里开始。是否应该使用新变量创建
我想在 python 中创建一个每行三列的矩阵,并能够通过任何一行对它们进行索引。矩阵中的每个值都是唯一的。 据我所知,我可以设置如下矩阵: matrix = [["username", "name"
我有点迷茫 我创建了一个名为 person 的类,它具有 age 和 name 属性(以及 get set 方法)。然后在另一个类中,我想创建一个 persons 数组,其中每个人都有不同的年龄和姓名
我有 n 个类,它们要么堆叠,要么不堆叠。所有这些类都扩展了同一个类 (CellObject)。我知道更多类将添加到此列表中,我想创建一种易于在一个地方操纵“可堆叠性”的方法。 我正在考虑创建一个矩阵
我有一个包含 x 个字符串名称及其关联 ID 的文件。本质上是两列数据。 我想要的是一个格式为 x x x 的相关样式表(将相关数据同时作为 x 轴和 y 轴),但我想要 fuzzywuzzy 库的函
机器学习与传统编程的一个重要区别在于机器学习比传统编程涉及了更多的数学知识。不过,随着机器学习的飞速发展,各种框架应运而生,在数据分析等应用中使用机器学习时,使用现成的库和框架成为常态,似乎越来越不需
当我在 julia 中输入这个错误跳转但我不知道为什么,它应该工作。/ julia> A = [1 2 3 4; 5 6 7 8; 1 2 3 4; 5 6 7 8] 4×4 Array{Int64,
我是一名优秀的程序员,十分优秀!