2017-03-15 10 views
0

私は簡単な質問があります。私は、なぜgpu(cuda)とcpuによって与えられたネットワーク応答に大きな違いがあるのか​​を理解しようとしています。ここでは、最小限の例です:トーチ:GPU/CPU応答の違い

require 'torch' 
require 'nn' 
require 'cunn' 
require 'paths' 

-- a small convnet 
net = nn.Sequential() 
net:add(nn.SpatialConvolution(3,16, 3,3)) 
net:add(nn.SpatialConvolution(16,8, 3,3)) 
net:add(nn.SpatialConvolution(8,1, 3,3)) 

-- randomize weights 
local w = net:getParameters() 
w:copy(torch.Tensor(w:nElement()):uniform(-1000,1000)) 

-- random input 
x = torch.Tensor(3, 10, 10):uniform(-1,1) 

-- network on gpu 
net:cuda() 
y = net:forward(x:cuda()) 
print(y) 

-- network on cpu 
y2 = net:clone():double():forward(x) 
print(y2) 

-- check difference (typically ~10000) 
print("Mean Abs. Diff:") 
print(torch.abs(y2-y:double()):sum()/y2:nElement()) 

は、私がここで間違って何かをやっている、またはそれは、CPU/GPU計算の間にいくつかの期待の違いは?

答えて

0

それは(1E-5%程度)平均絶対差が大きくなる可能性があっても、割合の差は非常に小さい、判明:

print("Mean Abs. % Diff:") 
print(torch.abs(y2-y:double()):cdiv(torch.abs(y2)):sum()/y2:nElement()) 

は、平均絶対差分です。どのようにcudaがCPUと比較して浮動小数点精度を扱うかにいくつかの違いがあるために大きいですか?

関連する問題