解释Caffe模型

我正在尝试理解和解释用Caffe .proto编写的模型。

昨天我看到@某人这里分享的一个'deploy.prototxt'样本,如下所示:

layer {   name: "ip1_a"   bottom: "data_a"   top: "ip1_a"   type: "InnerProduct"   inner_product_param {     num_output: 10   }   param {     name: "ip1_w"  # 注意这个名字!     lr_mult: 1   }   param {     name: "ip1_b"     lr_mult: 2   } } layer {   name: "ip1_b"   bottom: "data_b"   top: "ip1_b"   type: "InnerProduct"   inner_product_param {     num_output: 10   }   param {     name: "ip1_w"  # 注意这个名字:它是相同的!     lr_mult: 10 # 这个分支的学习率不同   }   param {     name: "ip1_b"     lr_mult: 20   } } # 一个层用于合并它们      layer {   type: "Concat"   bottom: "ip1_a"   bottom: "ip1_b"   top: "ip1_combine"   name: "concat" } layer {   name: "joint_ip"   type: "InnerProduct"   bottom: "ip1_combine"   top: "joint_ip"   inner_product_param {     num_output: 30   } } 

我对这个模型定义的理解如下:

     data_a         data_b        |             |        |             |     -------       -------       | ip1_a |     | ip1_b |     -------       -------        |             |        |             |      ip1_a         ip1_b        |             |        |             |        V             V        ~~~~~~~~~~~~~~~               |               |               V         -------------         |    concat   |         -------------                |               |         ip1_combine               |               |         -------------         |   joint_ip  |         -------------                |               |            joint_ip   

ip1_a blob由ip1_a层训练,权重使用ip1_w(lr:1)初始化,偏置使用ip1_b(lr:2)初始化。实际上,ip1_a blob是使用ip1_w初始化的新学习权重。学习到的偏置没有名称。

在一些模型中,我们可以发现一些层有:

lr_mult:1lr_mult:2

其中,第一个lr_mult实例始终对应于权重,第二个实例对应于偏置。

我上面的理解是否正确?


回答:

你混淆了两种数据类型:输入(训练)数据和网络参数。
在训练过程中,输入数据固定为已知的训练/验证集,只有网络参数会发生变化。相反,在部署网络时,数据会变为新的图像,而网络参数是固定的。请参阅这个回答,了解Caffe存储这两种数据类型的方式的详细描述。

在你展示的例子中,有两个输入训练数据路径:data_adata_b,每次可能为不同的图像。输入blob通过InnerProduct层分别变为ip1_aip1_b blob。然后它们被连接成一个单一的blob ip1_combined,然后输入到最终的InnerProduct层中。

另一方面,模型有一组参数:第一个内积层的ip1_wip1_b(权重和偏置)。在这个特定的例子中,层的参数被明确命名,以表明它们在ip1_aip1_b层之间是共享的。

至于两个lr_mult:是的,第一个是权重的学习率乘数,第二个是偏置项的。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注