當我使用numpy.dot
代替ndarray
時,出現了一個奇怪的現象。這是安裝在我的MacOSX的numpy
的信息:使用Mac osx加速框架在NaN中的矩陣乘法結果
{'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
!此外,我還發現y中的Nan
的位置是每個實驗之間的差異。
我用同樣的W
和X
,做該操作在另一臺PC與Ubuntu14.04
的numpy
的在PC上的信息是:
{'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
重量斑點,並X
是輸入到該層。我還在我的MacOSX上使用了caffe
,它使用Accelerate.framework
作爲它的矩陣乘法庫。奇怪的事情也發生了。
你有沒有機會驗證是否有零除? –
@HarshWardhan我所做的實驗只包含矩陣乘法,根本沒有劃分。 – dremaingo