在python numpy中实现Relu派生
machine-learning
numpy
python
8
0

我正在尝试实现一个函数,该函数计算矩阵中每个元素的Relu导数,然后将结果返回到矩阵中。我正在使用Python和Numpy。

根据其他交叉验证帖子,x的Relu导数在x> 0时为1,在x <0时为0,未定义,在x == 0时为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函数?

非常感谢。

参考资料:
Stack Overflow
收藏
评论
共 4 个回答
高赞 时间 活跃

返回relu的导数的基本函数可总结如下:

f'(x) = x > 0

因此,用numpy可以是:

def relu_derivative(z):
    return np.greater(z, 0).astype(int)
收藏
评论

这是矢量化的练习。

此代码

if x > 0:
  y = 1
elif xi <= 0:
  y = 0

可以改写成

y = (x > 0) * 1

这对于numpy数组将起作用,因为涉及它们的布尔表达式将转换为这些数组中这些元素的这些表达式的值的数组。

收藏
评论

我想这就是您要寻找的东西:

>>> 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.]])
收藏
评论
def dRelu(z):
    return np.where(z <= 0, 0, 1)

在我的情况下,z是一个ndarray。

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号