解析了许多关于在Python中构建Caffe图层的链接后,我仍然难以理解一些概念.有人可以澄清一下吗?
我仍然缺少的是:
setup()方法:我应该在这做什么?为什么在例子中我应该将'底部'参数的长度与'2'进行比较?为什么它应该是2?它似乎不是批量大小,因为它是随意的?据我所知,底部是blob,然后第一个维度是批量大小?reshape()方法:据我所知'底部'输入参数是下层的blob,'top'参数是上层的blob,我需要根据我的计算的输出形状重新形成顶层.但是,如果这些形状不是从传递变为传球,只有重量变化,为什么我需要在每个前进传球中执行此操作?reshape和forward方法有0个索引用于'top'输入param使用.为什么我需要使用top[0].data=...或top[0].input=...代替top.data=...和top.input=...?这个指数怎么样?如果我们不使用此顶级列表的其他部分,为什么以这种方式暴露它?我可以怀疑它或C++骨干的巧合,但确切地知道它会很好.reshape() 方法,符合:
if bottom[0].count != bottom[1].count
Run Code Online (Sandbox Code Playgroud)
我在这做什么 为什么它的尺寸又是2?我在这里算什么?为什么blob(0和1)的两个部分在某些成员(count)的数量上应该相等?
forward() 我用这条线定义的方法:
self.diff[...] = bottom[0].data - bottom[1].data
Run Code Online (Sandbox Code Playgroud)
如果我定义它,在前进路径后使用它?我们可以使用吗?
diff = bottom[0].data - bottom[1].data
Run Code Online (Sandbox Code Playgroud)
相反,在这个方法中稍后计算损失,而不是分配self,或者是为了某种目的而完成的?
backward()方法:这是关于什么的for i in range(2):?为什么范围又是2?
backward()方法,propagate_down参数:为什么定义?我的意思是,如果它的真实,渐变应该分配给bottom[X].diff我所看到的,但是为什么有人会调用什么都不会做的方法propagate_down = False,如果它什么都不做而且还在里面循环? …