在python numpy中实现Relu派生
我试图实现一个函数,它计算矩阵中每个元素的Relu导数,然后将结果返回到矩阵中。我正在使用Python和Numpy。在python numpy中实现Relu派生
基于其它交叉验证帖,x的RELU衍生物是 1当x> 0时,0当x < 0,未定义或0当x == 0
目前,我有以下代码,以便远:
def reluDerivative(self, x):
return np.array([self.reluDerivativeSingleElement(xi) for xi in x])
def reluDerivativeSingleElement(self, xi):
if xi > 0:
return 1
elif xi <= 0:
return 0
不幸的是,xi是一个数组,因为x是一个矩阵。 reluDerivativeSingleElement函数不适用于数组。所以我想知道是否有一种方法可以使用numpy将矩阵中的值映射到另一个矩阵,就像numpy中的exp函数一样?
非常感谢。
我想这是你在找什么:
>>> def reluDerivative(x):
... x[x<=0] = 0
... x[x>0] = 1
... return x
>>> z = np.random.uniform(-1, 1, (3,3))
>>> z
array([[ 0.41287266, -0.73082379, 0.78215209],
[ 0.76983443, 0.46052273, 0.4283139 ],
[-0.18905708, 0.57197116, 0.53226954]])
>>> reluDerivative(z)
array([[ 1., 0., 1.],
[ 1., 1., 1.],
[ 0., 1., 1.]])
您现在处于一个很好的轨道:思考向量化操作。在我们定义一个函数的地方,我们将这个函数应用到一个矩阵,而不是写一个for循环。
此主题回答你的问题,它代替所有元素满足条件。您可以将其修改为ReLU衍生物。
https://stackoverflow.com/questions/19766757/replacing-numpy-elements-if-condition-is-met
此外,Python支持函数式编程得非常好,尽量使用lambda函数。
基本函数返回衍生RELU的可以总结如下:
f'(x) = x > 0
所以,用numpy的,这将是:
def relu_derivative(z):
return np.greater(z, 0).astype(int)
当x大于0时,斜率为1. 当x小于或等于等于0,斜率为0。
if (x > 0):
return 1
if (x <= 0):
return 0
这可以写成更为紧凑:
return 1 * (x > 0)
这并没有回答这个问题,尽管更紧凑的可读性较差。 – bphi
这工作:
def dReLU(x):
return 1. * (x > 0)
[np.heaviside(https://docs.scipy.org/doc/numpy/reference/generated/numpy.heaviside.html) –