代码:https://github.com/LiuZhe6/AndrewNGMachineLearning
文章目录
测验:Neural Networks: Representation
第一题
答案
AD
分析:
B:错误,XOR需要三层。
C:输出结果并不是概率,不一定和为1。
第二题
答案
A
分析:画出真值表
x1 | x2 | 真值 |
---|---|---|
0 | 0 | 1 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
第三题
答案
A
第四题
答案
A
分析:
x为3 x 1的列向量,theta1为3 x 3 的矩阵,故做乘法时为 theta1 * x,并且sigmoid()不会改变乘法结果的大小,即a^(2)为3*1列向量,符合神经网络的定义。
第五题
答案
A
分析:交换了Layer2的两个节点,同时将theta1两行交换,并将theta2最后两列交换,相当于对应参数都没有发生变换,故值不变。
编程作业:
作业一:Regularized Logistic Regression
注意点:
注意CostFunction计算时,后部的theta平方里面theta(0)是不参与的,故在程序中theta(1)是不参与的。
注意gradient descent时,grad(0)是不正则化的!
lrCostFunction.m
% theta(0)不参与
J = 1 / m * ( -y' * log(sigmoid( X * theta )) - (1 - y)' * log(1 - sigmoid( X * theta ))) + lambda/(2*m)*(theta'*theta -theta(1)^2);
grad = 1 / m * (X' * (sigmoid(X*theta) - y));
temp = theta;
temp(1) = 0;
grad = grad + lambda/m * temp;
作业二:One-vs-All Classifier Training
oneVsAll.m
initial_theta = zeros(n + 1, 1);
options = optimset('GradObj', 'on', 'MaxIter', 50);
for c = 1:num_labels
all_theta(c,:) = fmincg(@(t)(lrCostFunction(t,X,(y==c),lambda)),initial_theta,options);
end
作业三:One-vs-All Classifier Prediction
predictOneVsAll.m
% 罗辑回归预测结果
A = sigmoid( X * all_theta') ;
% 获得每一行最大值与下标
[x,index] = max (A,[],2);
% 将下标置给p,代表预测结果
p = index;
作业四:Neural Network Prediction Function
使用已经训练好的Theta1 和 Theta2,直接可以通过神经网络计算得到假设函数的结果,找到最大概率对应的下标,即为预测手写图片对应的数字。
% a1加一列,值全为1
a1 = [ones(m,1) X];
z2 = a1 * Theta1';
% 计算a2
a2 = sigmoid(z2);
% a2添加一列,值全为1
a2 = [ones(size(z2,1),1) a2];
z3 = a2 * Theta2';
% 计算a3
a3 = sigmoid(z3);
[value ,index] = max(a3, [] , 2);
p = index;