python计算ex函数_python – numpy:计算softmax函数的导数

我试图用MNIST理解一个简单的3层神经网络中的反向传播.

输入层有权重和偏差.标签是MNIST,因此它是10类向量.

第二层是线性转变.第三层是softmax激活,以获得输出作为概率.

反向传播计算每一步的导数并将其称为梯度.

以前的图层将全局或上一个渐变附加到局部渐变.我无法计算softmax的局部梯度

在线的几个资源通过对softmax及其衍生物的解释,甚至给出了softmax本身的代码样本

def softmax(x):

"""Compute the softmax of vector x."""

exps = np.exp(x)

return exps / np.sum(exps)

关于何时i = j和何时i!= j来解释导数.这是一个我想出的简单代码片段,希望能够验证我的理解:

def softmax(self, x):

"""Compute the softmax of vector x."""

exps = np.exp(x)

return exps / np.sum(exps)

def forward(self):

# self.input is a vector of length 10

# and is the output of

# (w * x) + b

self.value = self.softmax(self.input)

def backward(self):

for i in range(len(self.value)):

for j in range(len(self.input)):

if i == j:

self.gradient[i] = self.value[i] * (1-self.input[i))

else:

self.gradient[i] = -self.value[i]*self.input[j]

然后self.gradient是局部渐变,它是一个向量.它是否正确?有没有更好的方法来写这个?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值