2017-12-31 39 views
1

net.params [layer] .diff가 net.params [layer] .data와 같은 손실 함수의 파생이어야한다는 것을 알고 있습니다. 그러나 다음 예제와 혼동을 겪습니다. 3 계층 (ip1 , ip2, ip3) MNIST의 완전히 연결된 네트.Caffe의 net.params [layer] .diff에 실제로 저장되는 내용은 무엇입니까?

import caffe 
    caffe.set_mode_cpu() 
    import numpy as np 

    solver = caffe.SGDSolver('solver.prototxt') 
    solver.net.copy_from('iter_18000.caffemodel') 

    solver.net.forward() 
    solver.net.backward() 
    # the computed derivatives of ip3 
    # shape of ip3: (10, 300) 
    computed = np.dot(np.transpose(solver.net.blobs['ip3'].diff), solver.net.blobs['ip2'].data) 
    # actual derivatives of ip3 
    actual = solver.net.params['ip3'][0].diff 
    print np.count_nonzero(computed - actual) 

결과는 2260입니다. 누군가 설명 할 수 있습니까? 많은 사람들.

+0

왜 'count_nonzero()'를 사용하여 비교하고 있습니까? ['np.allclose()'] (https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.allclose.html)을 사용해 보셨습니까? – Shai

+0

'False'를 반환합니다. 나는 또한 그들 사이의 정확한 차이점을 인쇄하려고 시도하고 큰 차이점을 발견했다. – NooFear

+0

얼마나 중요합니까? – Shai

답변

0

해결되었습니다. the computed derivatives of ip3np.dot(np.transpose(solver.net.blobs['ip3'].diff), solver.net.blobs['relu2'].data)이어야합니다. 예를 들어, relu는 추가 레이어입니다.