为了更好的学习,充分复习自己学习的知识,总结课内重要知识点,每次完成作业后
都会更博。
总结
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