python - 比较两个深度学习框架的特征响应

标签 python machine-learning deep-learning correlation feature-extraction

我正在从两个独立的机器/深度学习框架中提取两个特征响应。我现在有两个具有 NxF 维度的矩阵,其中 N 是样本数,F 是特征数。我想比较一下学习到的特征的相似程度。我已经尝试了几件事,但主要思想是使用相关性(尝试过 Pearson 和 Spearman)将特征响应关联到 FxF 矩阵。然后,我取单轴上的绝对值 max,然后计算这些最大值的平均值。实际上我有几个想要比较的框架,但我得到的结果非常相似。有人做过这个吗?还有其他人有更好的建议吗?我的代码示例如下。

from scipy.stats import spearmanr
import numpy as np

def similarity(resp1, resp2):
    rho, p = spearmanr(resp1,resp2)
    corr = rho[:resp1.shape[1],resp1.shape[1]:]
    sim_mtrx = np.abs(corr)
    feature_match = np.max(sim_mtrx,axis=1)
    return np.mean(feature_match)

最佳答案

Has anybody done this? Does anyone else have any better suggestions? My code sample is below.

说实话,这毫无意义。为什么?因为在像深网这样的东西中,特征没有顺序。因此,您所做的比较不能用来得出任何合理的结论。您的矩阵 N x F 可能是第一层的权重矩阵。因此,这些矩阵的每个(列)向量代表单个神经元。诀窍是 - 一个网络中的第 i 个神经元(使用一个框架训练)可以与另一个网络中的第 i 个神经元无关,但它可能与第 j 个。例如,考虑一个在 F=3 图像上训练的网络,您可能会发现这些神经元学会了检测水平(神经元 1)、垂直(神经元 2)线,也许还有一个圆圈(神经元 3)。现在你再次训练,要么使用不同的框架,要么使用相同的框架但不同的随机种子。现在,即使第二个网络学习完全相同的东西 - 检测水平线、垂直线和圆 - 但只是在不同的神经元中(例如水平 2、垂直 3、圆 1),您的方法将声称这些完全是不同型号,这显然是错误的。 “具有相似的表征”问题本身就是一个研究方向。

在应用您建议的基本分析之前,您至少需要找到两个网络中神经元之间的最佳匹配。您可以通过暴力破解(F^2 可能的映射,仅采用声称最大相似性的映射)或使用匈牙利算法之类的方法来找到完美匹配。

最重要的是保持引用比较,以避免出现上述问题,因此不要每个框架训练一个模型,而是每个框架训练至少2个 。现在,您不应声称“方法 A 和 B 产生(不)相似的表示,因为 A 和 B 的单个实验生成的表示是(不)相似的”,您应该检查两个方法之间的(不)相似性之间是否存在统计上的显着差异。相同算法的运行(使用不同的种子)和两种不同算法的单次运行,换句话说:

  • 您有 2 个算法 A、B(框架)
  • 您创建表示 A1、A2、B1、B2
  • 您测试是否mean(sim(A1, A2), sim(B1, B2)) !=mean(sim(A1, B1), sim(A2, B2))(而之前您只是检查是否 sim( A1, B1) 是“大”)

更新

只是为了说明为什么所考虑的指标是错误的,让我们将其用于:

>>> x
array([[0, 3, 6],
       [1, 4, 7],
       [2, 5, 8]])
>>> y
array([[ 6,  0,     0],
       [ 7, -1,  -123],
       [ 8,  0,  1000]])
>>> similarity(x,y)
1.0

您最终只会得到单个匹配项,您并不关心 90% 的数据完全不同 - 您仍然报告最大的相似性。

关于python - 比较两个深度学习框架的特征响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40185403/

相关文章:

python - 为什么某些实现在Python中运行缓慢?

Python 程序将在 Spyder 终端中运行,但不会在常规 linux 终端中运行

machine-learning - 用于多标签分类的机器学习模型,其中我们知道标签之间的关系

python - NER 训练循环中的损失不会在空间中减少

machine-learning - pytorch问题: how to add bias term and extract its value? 类与顺序模型?和softmax

neural-network - Keras sample_weight 数组错误

python - 如何从项目中获取用户故事 - Pyral

python - 如何从列表中的字符串末尾去除特定标点符号并使所有单词小写

python - Keras + TensorFlow Realtime 训练图

machine-learning - 无监督情感分析