2017-12-31 26 views
1

私はnet.params [layer] .diffがウェイト、すなわちnet.params [layer] .dataに対する損失関数の導関数でなければならないことを知っていますが、次の例では混乱します.3層(ip1 、ip2、ip3)完全に接続されたネット。実際に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です。誰か説明できますか?多くのthx。

+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は余分なレイヤーです。

関連する問題