您的位置:首页 > 编程语言 > Java开发

CS224n (Spring 2017) assignment 1-----2. Neural Network Basics

2018-03-05 13:04 561 查看




:这里的x是scalar, vector稍微复杂一些。





第二种做法:



注:注意求导的时候jacobian的维度,第一次就是把维度搞错了(因为这里两个维度都是C * C), 所以导致算了很久的结果。
Tensor求导可参考:
http://cs231n.stanford.edu/handouts/derivatives.pdf















注:这里存在一个问题,sigmoid_grad(s) 当s是一个向量或者是矩阵的时候,求导应该是一个jacobian, 而代码里没有求jacaobian, 只是在原有s的基础上求了导,ds与s维度相同。那么在反向传播运用链式法则的时候是怎么保证维度统一的呢?如下图,当s是一个vector时,ds的应该是一个n*n的对角矩阵:



这个问题是怎么解决的呢?以2.c为例,如下图:



cs231n那个derivative的文章处理的是线性函数的情况,这里处理的是sigmoid,都是不用求jacobian的,求jacobian太占内存。









注:这里是按照每个维度来验证的。











:(1)注意每个变量的维度,先把握好维度,然后再dot相乘,另外dot要根据实际的维度来写变量相乘的顺序,系统不会自动调整顺序,否则报错。
      (2)红框中的计算cost的算法正确,上边注释的不正确。
      (3)注意sigmoid_grad()要传入的是sigmoid的结果,而不是变量。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐