当我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
并在另一台电脑上使用Ubuntu14.04
执行该操作,该电脑中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
作为矩阵乘法库。也发生了奇怪的事情。