这是一个简单的层,它将底部的 Blob 传递到顶部,并且不执行任何其他操作。
import caffe
import numpy as np
class MyCustomLayer(caffe.Layer):
def setup(self, bottom, top):
if len(bottom) != 1:
raise Exception("Wrong number of bottom blobs")
def forward(self, bottom, top):
top[0].data[...] = bottom[0].data
def reshape(self, bottom, top):
top[0].reshape(*bottom[0].shape)
pass
def backward(self, propagate_down, bottom, top):
"""
This layer does not back propagate
"""
pass
但是,在网络中使用时,网络不会收敛,并且会保持 0.1
精度(而在使用此层之前为 0.75%)
我在这里做错了什么?
最佳答案
如果你不反向传播梯度,你期望你的网络如何收敛?您还需要实现backward
:
def backward(self, top, propagate_down, bottom):
bottom[0].diff[...] = top[0].diff
请注意,backward()
的输入参数与其他方法不同,并且与您在问题中编写的内容不同。
关于neural-network - 在 pycaffe 中创建简单的身份层后网络不收敛,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45105631/