gpt4 book ai didi

python - 我应该如何在 Caffe Python 层中使用 blob,以及它们的训练何时进行?

转载 作者:太空宇宙 更新时间:2023-11-03 15:08:47 25 4
gpt4 key购买 nike

我正在使用 Caffe 创建一个网络,我需要为其定义自己的层。我想为此使用 Python 层。

我的图层将包含一些学习的参数。来自 this answer ,我被告知我需要为此创建一个 blob 向量。

  1. 此 Blob 是否需要遵循任何规范,例如如尺寸限制等?不管我的层是什么是的,我可以创建一个一维的 blob,并使用任何元素,一个层中任何计算的 blob 的每个?
  2. blob 的 diff 是什么意思?据我了解,bottomdiff 是当前层的梯度,top 是上一层的梯度。然而,到底发生了什么here
  3. 这些参数什么时候接受训练?这是否需要在图层定义中手动完成?

我看过test_python_layer.py中的例子,但大多数没有任何参数。

最佳答案

您可以根据需要添加任意数量的内部参数,并且这些参数(Blob)可以具有您想要的任何形状。

要添加 Blob(在图层的类中):

def setup(self, bottom, top):
self.blobs.add_blob(2) # add two blobs
self.blobs[0].reshape(3, 4) # first blob is 2D
self.blobs[0].data[...] = 0 # init
self.blobs[1].reshape(10) # second blob is 1D with 10 elements
self.blobs[1].data[...] = 1 # init to 1

每个参数的“含义”是什么以及如何在 self.blobs 中组织它们完全取决于您。

可训练参数是如何“训练”的?
这是 caffe(以及其他 DNN 工具包)最酷的事情之一,您无需担心!
你需要做什么?您所需要做的就是计算损失相对于参数的梯度并将其存储在 self.blobs[i].diff 中。一旦梯度更新,caffe 的内部就会根据梯度/学习率/动量/更新策略等来更新参数。
所以,
必须为您的图层提供一个不平凡的backward方法

backward(self, top, propagate_down, bottom):
self.blobs[0].diff[...] = # diff of parameters
self.blobs[1].diff[...] = # diff for all the blobs

完成后,您可能想要测试该层的实现。
看看this PR用于梯度的数值测试。

关于python - 我应该如何在 Caffe Python 层中使用 blob,以及它们的训练何时进行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44418828/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com