我正在尝试使用 Keras 中的 Hebbian 更新来实现一个无监督的 ANN。我在这里找到了一个由 Dan Saunders 制作的自定义 Hebbian 层 - https://github.com/djsaunde/rinns_python/blob/master/hebbian/hebbian.py (我希望在这里询问关于另一个人的代码的问题不是糟糕的形式)
在我发现在 repo 中使用此层的示例中,此层用作 Dense/Conv 层之间的中间层,但我想仅使用 Hebbian 层构建网络。
在这个实现中,有两个关键的事情让我感到困惑:
似乎输入暗淡和输出暗淡必须相同才能使该层正常工作。为什么会是这种情况,我该怎么做才能使它们与众不同?
为什么权重矩阵的对角线设置为零?它说这是为了“确保没有神经元与自身横向连接”,但我认为连接权重在前一层和当前层之间,而不是当前层和自身之间。
下面是 Hebbian 层实现的代码:
from keras import backend as K
from keras.engine.topology import Layer
import numpy as np
import tensorflow as tf
np.set_printoptions(threshold=np.nan)
sess = tf.Session()
class Hebbian(Layer):
def __init__(self, output_dim, lmbda=1.0, eta=0.0005, connectivity='random', connectivity_prob=0.25, **kwargs):
'''
Constructor for the Hebbian learning layer.
args:
output_dim - The shape of the output / activations computed by the layer. …Run Code Online (Sandbox Code Playgroud) python neural-network unsupervised-learning keras tensorflow
我想计算可以具有不同长度的时间序列数据段之间的相似性。在寻找相似性度量时,我想考虑长度和价值的差异。我认为 Levenshtein distance 对此会很好,只要它适用于一系列浮点数而不是字符串。
这个问题解释了当被替换的整数值的差异无关紧要时,如何将 Levenshtein distance 与整数列表一起使用。在这种情况下,值的差异很重要,较大的差异应该受到更多的惩罚(我正在使用浮点数)。
当然,我对完成类似事情的其他相似性指标持开放态度,我只是认为 Levenshtein 距离已经非常接近我想要的了。
例子:
比较第一个元素的惩罚较小,下一个元素的惩罚稍大,然后第三个元素的惩罚较大,最后一个元素的删除惩罚。
algorithm signal-processing similarity information-theory levenshtein-distance