주제를 더 잘 이해하기 위해 MATLAB에서 신경망을 구현했습니다.Matlab GPU Backpropagation
내 GPU에서 코드를 실행하려고 했으므로 모든 매트릭스를 gpuArray()
으로 초기화했지만 성능이 향상되지 않았습니다. 또한 GPU가 CPU보다 느린 경우가 있습니다. 나는 이미 arrayfun
, pagefun
과 같은 기능을 사용하는 방법을 배웠다. 역순으로 모든 레이어에 대해 델타 오류를 계산하는 for
루프가 있습니다. 그러나 계산에 이전 계산의 결과가 필요하며 함수 *fun()
을 사용하여이를 수행하는 방법을 알지 못합니다.
내 CPU는 i5-3570이고 내 GPU는 GTX 660 Ti입니다. 이미 MATLAB에서 GPUBench을 테스트했지만 GPU는 CPU보다 x 배 빠르기 때문에 실수로 생각합니다.
TL; DR
어떻게 GPU 컴퓨팅이 MATLAB 코드를 향상시킬 수 있습니까?
delta_output = (predicted - NN.Y) .* NN.activationGradient(predicted);
delta_hidden(:, :, m) = (delta_output * NN.Theta_output) .* ...
NN.activationGradient(NN.a_hidden(:, :, m));
for i = m-1:-1:1
delta_hidden(:, :, i) = (delta_hidden(:, 2:end, i+1) * ...
NN.Theta_hidden(:, :, i)) .* ...
NN.activationGradient(NN.a_hidden(:, :, i));
end
predicted
, NN.y
, NN.Theta_*
모든 gpuArray
있습니다. 나는 delta_*
을 이미 gpuArray
으로 초기화했으나 아무런 변화가 없다.
GPU 컴퓨팅에 오신 것을 환영합니다. 우선 배워야 할 사항 : GPU에서는 모든 것이 더 빠릅니다. 데이터의 양, 문제 자체 등에 따라 다릅니다. 그 외에, MATLAB은 GPU에서 몇 가지 일을하지만 매우 불량한 GPU 프로그래밍 도구입니다. GPU에 데이터를 저장하는 속도가 느립니다. 코드 조각에있는 모든 항목이 GPU에서 실행되는지 확인하십시오. 그렇지 않으면 데이터를 앞뒤로 이동시키고 모든 것을 느리게 할 수 있습니다. 또한 해당 색인 생성 (예 :'NN.activationGradient (NN.a_hidden (:, :, i))')은 코드를 느려지 게 만듭니다. –