exercise4
来源:互联网 发布:outlook mac 下载 编辑:程序博客网 时间:2024/05/16 23:54
又是周一了,又来这里开始做题啦。
这次做的exercise4,开始正式进入神经网络的世界。
本文中所涉及的是一级神经网络。第一层的维度是400,代表20X20的像素;第二层就是中间层,维度是25,最后一层的维度为10,代表是10的数字分别的可能性。
最基本的,重要的计算神经网络中的损失函数,可以直接套用:
%现在开始复习神经网络的过程%首先要明确,每一行是一个X,所以需要在最最左边增加一列1,变成5000X401的数据%b([1:size(X,1)],1)=1;a0=[b,X];z1=a0*Theta1';%得到的结果是5000X25的矩阵a1=sigmoid(z1);%需要将结果变成5000X26的矩阵b([1:size(a1,1)],1)=1;a1=[b,a1];%进行中间层到结果层的计算z2=a1*Theta2';%得到的结果是5000X10的矩阵a2=sigmoid(z2);%开始计算JJ=sum(sum(-y_cacu.*log(a2)-(1-y_cacu).*log(a2)))/m;
上面的例子中,原始数据共有5000个,为400维,中间的神经元的维度为25,最终结果的维度是10。但是可以直接使用,因为没有使用直接的数字。
但过一段时间后发现是有错误的。最明显的错误就是J的计算式写错了。
现在提供正确的算法:
%如果要计算J的话,需要将输入的向量y进行处理%y的数值对应的部分为1,其他部分为0。y_cacu=zeros(m,num_labels);for i=1:size(y_cacu,1) y_cacu(i,y(i))=1;end%现在开始复习神经网络的过程X=[ones(m,1) X];a1=sigmoid(X*Theta1');a1=[ones(m,1) a1];a2=sigmoid(a1*Theta2');theta1_t=[zeros(size(Theta1,1),1) Theta1(:,2:end)];theta2_t=[zeros(size(Theta2,1),1) Theta2(:,2:end)];cost=y_cacu .* log(a2) + (1 - y_cacu) .* log(1 - a2);cost=-sum(sum(cost))/m;theta1_t = theta1_t.^2;theta2_t = theta2_t.^2;J=cost + lambda / (2 * m) *(sum(sum(theta1_t)) + sum(sum(theta2_t)));这里要强调一下对矩阵中的所有元素求和,千万不要忘了求和这个步骤。
之后开始进入循环不断计算梯度:
%现在开始正式进行本文的运算grad1=zeros(size(Theta1));grad2=zeros(size(Theta2));for i=1:m a1=X(i,:)';%401x1 z2=Theta1*a1;%25x1 a2=sigmoid(z2);%25*1; a2=[1;a2];%26x1 z3=Theta2*a2;%10x1 a3=sigmoid(z3);%10x1 %之后开始计算损失 %error3 error3=zeros(size(a3)); for j=1:num_labels error3(j)=a3(j)-(y(i)==j); end %error2 error2=Theta2'* error3; error2=error2(2:end,:) .* sigmoidGradient(z2); %计算gradient grad2 = grad2 + error3 * a2'; grad1 = grad1 + error2 * a1';endTheta1_temp = [zeros(size(Theta1,1),1) Theta1(:,2:end)];Theta2_temp = [zeros(size(Theta2,1),1) Theta2(:,2:end)];Theta1_final=grad1 / m + lambda / m * Theta1_temp;Theta2_final=grad2 / m + lambda / m * Theta2_temp;grad = [Theta1_final(:) ; Theta2_final(:)];
这就是本次联系最重要的部分,但最终还不理解的就是为什么grad要进行这个运算。向后传播的原理已经明白 。
推荐一个讲解:点击打开链接真的很清楚明白。
之后再这个联系中就没有什么难点了,这个练习到这里就可以结束了。
阅读全文
0 0
- exercise4
- Exercise4.1
- Exercise4.2E2(a) Exercise4.3E2
- 分支选择结构Exercise4
- Exercise4.3 E2
- Homework Exercise4.1 E1 E2
- Chapter 4 Exercise4.1 E1 E2 解答
- Exercise 4.2 E2(a)和Exercise4.3E2
- 作业 Exercise 4.2 E2(a)和Exercise4.3E2
- 【绿皮】新GRE填空补充练习题Exercise4
- 2017夏天之哪凉快去哪里 之二
- Qt Creator使用记录
- Spring Boot 集成Swagger
- unity3d 使用Helios渲染360度全景视频
- 20170724_Linux常用基本命令
- exercise4
- es6学习
- VIM 打开文件跳转到底部
- RocketMQ与kafka对比(官方)
- Python 修改列表中的元素
- Android 深入理解Android中的自定义属性
- 他人的求职经验
- 【String格式化】千位分隔符并保留两位小数
- js表单和submit 区别