[ML] ex4 Neural Networks Learnin

2018-11-12  本文已影响0人  反复练习的阿离很笨吧

1 Neural Networks

才以上到ex3的前向传播是用的现成的数据,并不是自己学习出来的。

1.1 Visualizing the data

5000 training examples
each training example is a 20 pixel by 20 pixel grayscale image which had been "unrolled" into a 400-dimensional vector
matrix X: 5000 by 400
vector y: 5000-dimensional (a "0" digit is labeled as "10")

1.2 Model representation

3 layers: an input layer,a hidden layer and an output layer
% Theta1 has size 25 x 401
% Theta2 has size 10 x 26

1.3 Feedforward and cost function

之前的cost function中,一个instance只有一个h_{\theta}(x),vector y对每一个instance也只有一个值,就可以直接矢量相乘求出cost。
而现在这个多分类问题的cost function中有多个h_{\theta}(x),可以看作一个向量,vector y对每一个instance也被矢量化,与K个h_{\theta}(x)一一对应,所以,就可以先求出这一个instance的K个h_{\theta}(x)的cost的和。然后用for loop把m个instances的cost累加。
向量化的好处就是不需要知道K是多少啊,直接乘就好了。
一次性向量化的方法我想到脑子宕机都想不出来。所以累加instance的时候,只能先用for loop了。

  1. y给定的形式是label,是一个数字,需要把它矢量化。
    一开始没有矢量化,跑出来会出现10个cost值,还都不对。
  2. 不要忘记cost function里的log
    每次就是光把两项乘起来就特别开心,然后忘记给h加log。

感觉自己写的矢量化思路特别清晰,比参考的几篇文章里绕来绕去的行列摆放都要好理解一些。

1.4 Regularized cost function

注意在归一化之前要去掉bias项Theta1_use=Theta1(:,2:end);
点乘平方可以这样写的thetasq1=Theta1_use.^2;
a=sum(x);%列求和
a=sum(x,2);%行求和
a=sum(x(:));%矩阵求和

2 Backpropagation

2.1 Sigmoid gradient

因为是两个矩阵相乘,用点乘完成g = sigmoid(z).*(1.0-sigmoid(z));

2.2 Random initialization

W = rand(L_out, 1 + L_in) * 2 * epsilon_init - epsilon_init;

2.3 Backpropagation

上一篇下一篇

猜你喜欢

热点阅读