【问题标题】:Matrix multiplication result in NaN by using Mac osx Accelerate framework使用 Mac osx Accelerate 框架的矩阵乘法结果为 NaN
【发布时间】:2016-03-01 04:15:07
【问题描述】:

当我将numpy.dot 用于ndarray 时,发生了一个奇怪的现象。这是安装在我的 MacOSX 上的numpy 的信息:

{'define_macros': [('NO_ATLAS_INFO', 3), ('HAVE_CBLAS', None)],
 'extra_compile_args': ['-msse3',
 '-I/System/Library/Frameworks/vecLib.framework/Headers'],
 'extra_link_args': ['-Wl,-framework', '-Wl,Accelerate']}

假设有两个矩阵W(m, k)X(k, n)y = W.dot(X),我发现y中有一些位置是NaN。例如:y[i][j] == Nan。然后我做以下操作:

a = W[i].dot(X[:,j])

我发现a 不是Nan!此外,我还发现Nan在y中的位置在每个实验之间是不同的。

我使用相同的WX 并在另一台PC 上使用Ubuntu14.04 执行该操作,该PC 中numpy 的信息是:

{'define_macros': [('ATLAS_INFO', '"\\"3.10.1\\""')],
 'include_dirs': ['/usr/include/atlas'],
 'language': 'c',
 'libraries': ['f77blas', 'cblas', 'atlas'],
 'library_dirs': ['/usr/lib/atlas-base']}

y = W.dot(X)是正常的,里面没有NaN

我知道numpy.dot 是如何实现的,并且cblas_dgemm() 被称为双精度矩阵时间矩阵情况。 那么 MacOSX Accelerate 框架中是否有任何错误?


矩阵Wcaffe.convolutionLayer 中的权重blob,X 是该层的输入。我还在我的MacOSX上使用了caffe,它使用Accelerate.framework作为它的矩阵乘法库。奇怪的事情也发生了。

【问题讨论】:

  • 您是否有机会验证是否有除零?
  • @HarshWardhan 我做的实验只包含矩阵乘法,根本没有除法。

标签: macos numpy nan caffe blas


【解决方案1】:

如果矩阵包含零和 inf/-inf,则乘积 zero*inf 似乎被定义为 nan。 BLAS 库中似乎存在不一致,我的 (libblas3) 有时会忽略 NaN 值,并对不同大小的矩阵给出不同的结果。比较相差 AxB == trans(trans(A)*trans(B)) 的位置,其中 A 和 B 是矩阵,而 trans() 是矩阵的转置。

【讨论】:

    猜你喜欢
    • 2017-03-07
    • 2014-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-12
    • 2017-09-19
    • 2012-05-22
    • 1970-01-01
    相关资源
    最近更新 更多