机器学习(7)-神经网络预测练习

使用前向传播,预测已有的神经网络。

  • 一个2层的神经网络,如下图:
    0029.jpg
    这个神经网络已经训练好了,只需要预测即可。predit函数表示预测
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    pred = 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中的后半部分

文章目录
,
#add by kangyabing