如果你愿意忽略,你的功能很简单 np.around :
np.around
对于 x=x_min 并为 x=x_max 对于所有其他的,导数为零 x 衍生品是 255/(x_max-x_min) 。
x=x_min
x=x_max
x
255/(x_max-x_min)
这可以通过实现
def forward(self, bottom, top): in_ = bottom[0].data self.x_min = in_.min(axis=(0, 1), keepdims=True) # cache min/max for backward self.x_max = in_.max(axis=(0, 1), keepdims=True) top[0].data[...] = 255*((in_-self.x_min)/(self.x_max-self.x_min))) def backward(self, top, propagate_down, bottom): in_ = bottom[0].data b, c = in_.shape[:2] diff = np.tile( 255/(self.x_max-self.x_min), (b, c, 1, 1) ) diff[ in_ == self.x_min ] = 0 diff[ in_ == self.x_max ] = 0 bottom[0].diff[...] = diff * top[0].diff
别忘了测试这个数字。这可以通过例如使用来完成 test_gradient_for_python_layer 。
test_gradient_for_python_layer