私はPython Caffeを使い、net.layers [layer_index] .blobsとnet.params [layer_type]と混同しています。私がうまく理解すれば、net.paramsにはすべてのネットワークパラメータが含まれています。 LeNetを例にとると、net.params ['conv1']は 'conv1'層のネットワーク係数を表します。次に、net.layer [layer_index] .blobsは同じものを表す必要があります。しかし、私が見つけたのは、まったく同じではないということです。私はそれをテストするために次のコードを使用します:Caffeのnet.layers.blobsとnet.paramsの違い
def _differ_square_sum(self,blobs):
import numpy as np
gradients = np.sum(np.multiply(blobs[0].diff,blobs[0].diff)) + np.sum(np.multiply(blobs[1].diff,blobs[1].diff))
return gradients
def _calculate_objective(self, iteration, solver):
net = solver.net
params = net.params
params_value_list = list(params.keys())
[print(k,v.data.shape) for k,v in net.blobs.items()]
layer_num = len(net.layers)
j = 0
for layer_index in range(layer_num):
if(len(net.layers[layer_index].blobs)>0):
cur_gradient = self._differ_square_sum(net.layers[layer_index].blobs)
key = params_value_list[j]
cur_gradient2 = self._differ_square_sum(params[key])
print([cur_gradient,cur_gradient2])
assert(cur_gradient == cur_gradient2)
それらの違いに関するアイデア?ありがとう。