【问题标题】:What's the difference between net.layers.blobs and net.params in CaffeCaffe 中的 net.layers.blobs 和 net.params 有什么区别
【发布时间】:2018-04-08 19:30:55
【问题描述】:

我正在使用 Python Caffe,并与 net.layers[layer_index].blobs 和 net.params[layer_type] 混淆。如果我理解得很好, net.params 包含所有网络参数。以 LeNet 为例,net.params['conv1'] 表示 'conv1' 层的网络系数。那么 net.layer[layer_index].blobs 应该代表相同。但是,我发现它们并不完全相同。我使用以下代码对其进行测试:

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)

对它们之间的区别有什么想法吗?谢谢。

【问题讨论】:

    标签: python neural-network deep-learning caffe pycaffe


    【解决方案1】:

    您正在混合可训练网络参数(存储在net.params)和输入数据到网络(存储在net.blobs):
    完成模型训练后,net.params 是固定的,不会更改。但是,对于您提供给网络的每个新输入示例,net.blobs 将存储不同层对该特定输入的响应。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-10
      • 1970-01-01
      • 2018-11-24
      • 1970-01-01
      • 2010-10-02
      • 2011-12-12
      • 2010-09-16
      相关资源
      最近更新 更多