为了更好的学习,充分复习自己学习的知识,总结课内重要知识点,每次完成作业后
都会更博。
总结
1.模型展示-1
(1)神经元
(2)人工神经网络
a.在人工神经网络中,神经元是一个逻辑单元(通过输入线输入、逻辑单元进行计算、发送输出线条输出)
b.该逻辑计算就像我们之前的逻辑回归假设计算
c.神经网络结构(第一层是输入层、第二层是隐藏层、第三层是输出层)
(3)神经网络——符号
a. ai(j) - 第i层中第j个单元
b. Ɵ(j) - 从第j层到第j+1层的权重函数
c.一个例子
d. Ɵjil
2.模型展示-2
(1)前向传播
a. 定义一些额外的项(z12 = Ɵ101x0 + Ɵ111x1 + Ɵ121x2 + Ɵ131x3)
c. z22 和 z32 与z12 一样
b. hƟ(x) = a3 = g(z3)
3.多分类问题(输出应该是互相正交的向量)
作业
1.载入和可视化数据
input_layer_size = 400; % 20x20 输入像素点
num_labels = 10; % 从1到10共10个标签
load('ex3data1.mat');
m = size(X, 1);
rand_indices = randperm(m); %生成一个随机向量,得到一个打乱的列向量
sel = X(rand_indices(1:100), :); %获得重新排序的前100个x
displayData(sel);
2.向量化逻辑回归
theta_t = [-2; -1; 1; 2];
X_t = [ones(5,1) reshape(1:15,5,3)/10];
y_t = ([1;0;1;0;1] >= 0.5);
lambda_t = 3;
[J grad] = lrCostFunction(theta_t, X_t, y_t, lambda_t);
%代价和梯度函数
m = length(y); % number of training examples
J = 0;
grad = zeros(size(theta));
temp=[0;theta(2:end)]; % 先把theta(1)拿掉,不参与正则化
J =-(1/m)*(y'*log(sigmoid(X*theta))+((1-y)'*log(1-sigmoid(X*theta)))) +lambda/(2*m) * temp' * temp ;
grad = ( X' * (sigmoid(X*theta) - y ) )/ m + lambda/m * temp;
grad = grad(:);
end
%One-vs-All 训练
lambda = 0.1;
[all_theta] = oneVsAll(X, y, num_labels, lambda);
%OVS函数
m = size(X, 1);
n = size(X, 2);
all_theta = zeros(num_labels, n + 1);
X = [ones(m, 1) X];
options = optimset('GradObj', 'on', 'MaxIter', 50);
initial_theta = zeros(n + 1, 1);
for c = 1:num_labels
all_theta(c,:) = fmincg (@(t)(lrCostFunction(t, X, (y == c), lambda)), ...
initial_theta, options);
end