【发布时间】: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中的位置在每个实验之间是不同的。
我使用相同的W 和X 并在另一台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 框架中是否有任何错误?
矩阵W 是caffe.convolutionLayer 中的权重blob,X 是该层的输入。我还在我的MacOSX上使用了caffe,它使用Accelerate.framework作为它的矩阵乘法库。奇怪的事情也发生了。
【问题讨论】:
-
您是否有机会验证是否有除零?
-
@HarshWardhan 我做的实验只包含矩阵乘法,根本没有除法。
标签: macos numpy nan caffe blas