网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
for num in x:
y.append(1 / (1 + math.exp(-num)))
for n in y:
fx.append(n * (1 - n))
return fx
3. softmax function
def softmax(x):
“”"Calculates the softmax for the input x.
Argument:
x – A numpy matrix of shape (n,)
Returns:
s -- A numpy matrix equal to the softmax of x, of shape (n,)
"""
# write your code here
x_exp = np.exp(x)
x_sum = np.sum(x_exp, axis=0, keepdims=True)
fx = x_exp / x_sum
return fx
4. cross entropy loss function
def cross_entropy_loss(target, prediction):
“”"
Compute the cross entropy loss between target and prediction
Arguments:
target – the real label, a scalar or numpy array size = (n,)
prediction – the output of model, a scalar or numpy array, size=(n, c)
Return:
mean loss -- cross_entropy_loss(target, prediction)
"""
# write your code here
batch_loss = 0.
for i in range(prediction.shape[0]):
numerator = np.exp(prediction[i, target[i]]) # 分子
denominator = np.sum(np.exp(prediction[i, :])) # 分母
# Calculating losses
loss = -np.log(numerator / denominator)
batch_loss += loss
return batch_loss
## 【代码要求】
1.按代码模板实现函数功能
## 【文档要求】
### 1. 代码运行结果截图(main函数里的内容不要修改)
### 2. sigmoid函数的公式及图像
sigmoid函数的公式如下:
![](https://img-blog.csdnimg.cn/1e58b6a6f94f4aae8e6e0a5d098c7510.png)
用python绘制sigmoid函数的图像:
![](https://img-blog.csdnimg.cn/05db29c376354b82b48e369f81c2544e.png)
函数图像如下所示:
![](https://img-blog.csdnimg.cn/bc697e14cb6e48dabb14ec81f83c53cd.png)
分析:从结果可知,符合sigmoid函数的定义,但是也可以看到sigmoid函数在x过大或者过小时梯度下降缓慢,因此除了Logistic Regression的输出层以外,很少用到sigmoid函数,且sigmoid函数会使得数据平均值在0.5附近。
### 3. sigmoid函数梯度求解公式及图像
sigmoid函数梯度求解推导如下:
![](https://img-blog.csdnimg.cn/0b616c8919e440c68515bbf6c6f50e85.png)
分析:函数的求导整体上是一个多重复合函数的求导,相对来说较为简单,但是后面的化简技巧我最初没有想到,根据结果的形式反推出了函数的化简方法。不得不感叹函数求导最终形式的简便。
用python绘制sigmoid函数梯度求解的图像:
![](https://img-blog.csdnimg.cn/d64a3d72604349f39b7087a33c052cfc.png)
sigmoid函数梯度求解的图像如下所示:
![](https://img-blog.csdnimg.cn/f5e6fa7d726d4b978d17ab6f0ceb2e94.png)
分析:从结果中可以看到sigmoid函数在x过大或者过小时梯度下降缓慢,会导致梯度更新得较缓,学习速度较慢。
### 4. softmax函数公式
![](https://img-blog.csdnimg.cn/5d424770243944ec8c7aaeb31a377800.png)
目的:将实数范围内的分类结果--转化为0-1之间的概率。
1.利用指数的特性,将实数映射到0-正无穷(非负)
2.利用归一化方法,将1.的结果转化为0-1之间的概率。
### 5. cross entropy loss function公式
交叉熵损失函数公式如下:
![](https://img-blog.csdnimg.cn/98b2ed7fbd2a4c03acd65abe1dde30b1.png)
具体在二分类问题中,交叉熵函数的公式如下:
![](https://img-blog.csdnimg.cn/bff08a42d9934639812b47cc5cc94200.png)
### 6. 它们在神经网络中有什么用处?
Sigmoid function:由上面的实验图可知,sigmoid是非线性的,因此可以用在神经网络隐藏层或者输出层中作为激活函数,常用在二分类问题中的输出层将结果映射到(0, 1)之间。可见sigmoid函数处处连续,便于求导,且可以将函数值的范围压缩到[0,1],可以压缩数据,且幅度不变。
Sigmoid gradient function:对于sigmoid函数的求导,可以在神经网络反向传播中求出。优化神经网络的方法是Back Propagation,即导数的后向传递:先计算输出层对应的loss,然后将loss以导数的形式不断向上一层网络传递,修正相应的参数,达到降低loss的目的。 Sigmoid函数在深度网络中常常会导致导数逐渐变为0,使得参数无法被更新,神经网络无法被优化。从导数图中容易看出,当中较大或较小时,导数接近0,而后向传递的数学依据是微积分求导的链式法则,当前层的导数需要之前各层导数的乘积,几个小数的相乘,结果会很接近0 ,此外Sigmoid导数的最大值是0.25,这意味着导数在每一层至少会被压缩为原来的1/4,通过两层后被变为1/16,…,通过10层后为1/1048576,且导数达到最大值这种情况很少见的。
Softmax function:softmax用于多分类问题,在多分类神经网络种,常常作为最后一层的激活函数,前一层的数值映射为(0,1)的概率分布,且各个类别的概率归一,与sigmoid不同的是,softmax没有函数图像,它不是通过固定的的映射将固定的值映射为固定的值,softmax是计算各个类别占全部的比例,可以理解为输入一个向量,然后出一个向量,输出的向量的个位置的元素表示原向量对应位置的元素所占整个向量全部元素的比例。因此原始向量经过softmax之后,原始向量中较大的元素,在输出的向量中,对应位置上还是较大,反之,原始向量中较小的元素还是会很小,保留了原始向量元素之间的大小关系。在做多分类问题时,输出向量的第几维最大,就表示属于第几个class的概率最大,由此分类。
![img](https://img-blog.csdnimg.cn/img_convert/45d99a5ed943d1d301a95f3dcc05ca49.png)
![img](https://img-blog.csdnimg.cn/img_convert/474cd67294dcf3058174b89166cdf3ef.png)
![img](https://img-blog.csdnimg.cn/img_convert/113c15e53a91cbe90cc1eccc4cdf7589.png)
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618658159)**
经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618658159)**