使用前向传播,预测已有的神经网络。
-
一个2层的神经网络,如下图:
这个神经网络已经训练好了,只需要预测即可。predit
函数表示预测1
2
3
4
5
6
7
8
9
10
11
12
13pred = predict(Theta1, Theta2, X);
//函数实现如下
m = size(X, 1);
num_labels = size(Theta2, 1);
% You need to return the following variables correctly
p = zeros(size(X, 1), 1);
X = [ones(m, 1) X];
a2 = sigmoid(X * Theta1'); % 第二层激活函数输出
a2 = [ones(m, 1) a2]; % 第二层加入b
a3 = sigmoid(a2 * Theta2');
[aa,p] = max(a3,[],2); % 返回每行最大值的索引位置,也就是预测的数字
Theta1
第一层的参数,Theta2
是第二层的参数。X
是5000x400的矩阵;每个训练数据是像素20x20的图像,每一行都是一个训练数据。Theta1
是25x401的矩阵,401多出来的以$x_0=1,\theta_0=1$
第二层的输入可以这样计算:1
a2 = sigmoid(X * Theta1');
这里Theta1
进行了转置,因此a2大小为5000x25。Theta2
大小为10x26,计算第二层输出时:1
a3 = sigmoid(a2 * Theta2')
a3
大小为5000x10。计算每行最大的值即为预测的值。取出最大值即可:1
[aa,p] = max(a3,[],2);
aa
存储着最大值,p
存储着最大值的索引。两者大小都是5000x1。
参考:Programming Exercise 3:Multi-class Classification and Neural Networks中的后半部分