mag*_*282 6 python precision numpy machine-learning theano
我正在使用Theano/NumPy做一些深入学习的东西.我发现了一个非常烦人的问题.我得到了权重矩阵A(假设为50*2048)和特征向量b(2048暗).
A使用初始化
self.alpha = np.random.random((50, 2048)).astype(np.float32) * 2 - 1.0
Run Code Online (Sandbox Code Playgroud)
b是来自theano的2048昏暗的numpy.ndarrary.
问题是
X = numpy.dot(A, b)
Y = [numpy.dot(A[i], b) for i in xrange(50)]
Run Code Online (Sandbox Code Playgroud)
X和Y的某些行并不严格相等.我比较了它们,发现差异在1e-6到1e-7之间.
目前我更喜欢使用秒来计算点积,因为它似乎可以学习更好的权重.但第一个要快得多.所以我想知道为什么会有这么大的差异.它是由点(矩阵,向量)和点(向量,向量)的不同实现引起的吗?非常感谢!
--edit正如你所提到的,这是你可以重现它的代码.
import numpy as np
test_time = 1000
vector_size = 100
matrix_size = (100, 100)
for i in xrange(test_time):
a = np.random.random(matrix_size).astype(np.float32) * 2 - 1.0
b = np.random.random(vector_size).astype(np.float32)
x = np.dot(a, b)
y = [np.dot(a[i], b) for i in xrange(a.shape[0])]
for k in xrange(len(y)):
epsilon = x[k] - y[k]
if abs(epsilon) > 1e-7:
print('Diff: {0}\t{1}\t{2}'.format(x[k], y[k], epsilon))
Run Code Online (Sandbox Code Playgroud)
嗯,通常需要在性能和精度之间进行权衡。您可能必须对其中一项进行补偿。尽管我个人认为 0.0000001 的差异在大多数应用程序中并不是什么大问题。如果您寻求更高的精度,最好选择float64
,但请注意,float64
GPU 上的运算速度非常慢,尤其是 NVIDIA 9xx 系列 GPU。
我可能注意到,上述问题似乎也取决于您的硬件设置,因为我在我的机器上没有遇到此类问题。
您还可以使用它np.allclose(x, y)
来查看差异是否明显。
归档时间: |
|
查看次数: |
610 次 |
最近记录: |