CS231N Assignment4 Two Layer Net

CS231N Assignment4 Two Layer Net

CS231N Assignment4 Two Layer Net

 

Begin


本文主要介绍CS231N系列课程的第四项作业,写一个两层神经网络训练模型。

课程主页:网易云课堂CS231N系列课程

语言:Python3.6

 

 1神经网络


 

          神经网络理解起来比较简单,在线形分类器的基础上加一个非线性激活函数,使其可以表示非线性含义,再增加

多层分类器就成为多层神经网络,如下图所示,由输入X经过第一层计算得到W1X,在后再用隐含层的激活函数max(0,s)

得到隐含层的输出。到输出层乘以W2得到输出层,最后的分类计分。

       下图中最左侧为3072代表每幅图像有3072个特征,经过第一层网络到达中间层叫做隐藏层,隐含层变为100个特征了,在经过第二层计算到输出层最终得到10个类的得分。此神经网络叫做两层的神经网络(包含W1、W2)也叫有一个隐含层的神经网络。

       对于激活函数只有在隐含层计算时有激活函数。

 

 

 

          对于激活函数,有很多种,如下所示,上述中我们采用的是RELU

 

 

2编写一个两层神经网络


 

 

类似于之前我们书写的SVM等,编写任何一个训练器需要包含以下几部分

1、LOSS损失函数(前向传播)与梯度(后向传播)计算

2、训练函数

3、预测函数

4、参数训练

 

2.1 loss函数


 

 损失函数计算采用softmaxu损失方法

1、首先计算前向传输,计算分数,就是上面那三个公式的调用

 

##############################
        #Computing the class scores of the input
        ##############################
        Z1 = X.dot(W1) + b1#第一层
        S1 = np.maximum(0,Z1)#隐藏层激活函数
        score = S1.dot(W2) + b2#输出层

 

  

2、计算完之后,插入一句话,当没有y参数时,直接输出分数,主要用在计算预测函数时需要计算分数。

        if Y is None:
            return score
        loss = None

 

3、之后计算损失softmax计算,具体计算可以参考我的作业3

 

        ###############################
        #TODO:forward pass 
        #computing the loss of the net 
        ################################
        exp_scores = np.exp(score)
        probs = exp_scores / np.sum(exp_scores,axis=1,keepdims=True)
        #数据损失
        data_loss = -1.0/ N * np.log(probs[np.arange(N),Y]).sum()
        #正则损失
        reg_loss = 0.5*reg*(np.sum(W1*W1) + np.sum(W2*W2))
        #总损失
        loss = data_loss + reg_loss

  

4、计算后向传播梯度

 

        ################################
     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值