本文是参考吴恩达老师的深度学习视频而做的笔记
深度学习
引言
挑战:AI真正的挑战在于解决那些对人类来说很容易执行,但很难形式化描述的问题,比如识别人们所说的话/图像中的脸/分辨苹果和梨。<br> 解决方案:让计算机从经验中学习,并根据层次化的概念体系理解世界,而每个概念是通过与某些相对简单的概念之间的关系来定义的。而如何绘制出这种关系,就是我们常说的深度学习。
区别
机器学习:AI系统需要具备自己获取知识的能力,即从原始数据中提取模式的能力。即研究人员不会编写指令控制机器,而是用大量数据和算法“训练”机器,让机器自己学会如何执行任务。
Octave的安装和使用
安装
1 brew update && brew upgrade 2 brew install gcc 3 brew install octave
注:不要安装4.0.0版本,该版本有重大bug.
使用
基本操作
加、减、乘、除
1 // 加 2 1+2 3 // 减 4 6-2 5 // 乘 6 3*4 7 //除 8 1/2 9 // 指数运算 10 2^3
逻辑运算
1 // 相等 2 1 == 2 % 注释内容 3 //不相等 4 1 ~= 2 % true 5 // 逻辑与 6 1 && 0 % false 7 // 逻辑或 8 1 || 0 % true 9 // 异或 10 xor(1,0)
修改提示符
PS1('>> ');
变量
1 a = 3 2 3 a = 3; % 阻止打印输出
打印或显示一个变量
1 a 2 3 disp(a) 4 5 6 7 // 显示默认位数 8 format long 9 a 10 format short 11 a
向量和矩阵
1 // 矩阵 2 A = [1 2; 3 4; 5 6] 3 // 行向量 4 v = [1 2 3] 5 // 列向量 6 v = [1; 2; 3] 7 //矩阵的其他生成 8 v = 1:0.1:2 9 v = 1:6 10 ones(2,3) 11 C = 2*ones(2,3) 12 w = ones(1,3) 13 w = zeros(1,3) 14 // 随机矩阵,数值0-1 15 w = rand(3,3) 16 // 服从正态分布 17 w = randn(1,3) 18 // 19 w = -6 + sqrt(10)*(rand(1,10000)); 20 // 绘制成直方图 21 hist(w) 22 hist(w,50) 23 24 // 单位矩阵 25 I = eye(4) 26 27 //帮助指令 28 help eye 29 help help 30
移动数据
1 A = [1 2; 3 4; 5 6] 2 // 矩阵维度 3 size(A) 4 sz = size(A) 5 size(sz) 6 //A矩阵第1维度的大小 7 size(A,1) 8 //A矩阵第2维度的大小 9 size(A,2) 10 // 矩阵两维度的最大值 11 v = [1 2 3 4] 12 length(v) 13 length(A)
导入数据
1 // 显示当前目录 2 pwd 3 cd '' 4 ls 5 // 导入数据 6 load house.dat 7 load price.dat 8 // 显示当前在内存中的变量 9 who 10 // 显示更详细的变量信息 11 whos 12 // 显示house.dat中的数据集 13 house 14 size(house) 15 size(price) 16 // 删除某个变量 17 clear price 18 // 清理工作空间 19 clear 20 // 赋值变量 21 v = priceY(1:5)
导出数据
1 // 存入硬盘 2 save hello.mat v; 3 save hello.txt v -ascii;
操作数据
索引操作
1 A = [1 2; 3 4; 5 6;] 2 // 第3行第2列的元素 3 A(3,2) 4 // 第2行所有元素 5 A(2,:) 6 // 第1列所欲元素 7 A(:,1) 8 // 第1行和第3行的所有元素 9 A([1 3],:) 10 // 将A的第2列赋值成[10;11;12;] 11 A(:,2) = [10;11;12;] 12 // 添加第3列 13 A = [A, [100; 101; 102;] 14 // 把A中所有元素放入一个单独的列向量 15 A(:) 16 // 结合矩阵 17 A = [1 2; 3 4; 5 6;] 18 B = [11 12 13; 14 15 16;] 19 C = [A B] 20 C = [A ; B]
计算数据
1 A = [1 2; 3 4;5 6] 2 B = [11 12;13 14; 15 16;] 3 C = [1 1;2 2;] 4 A * C 5 // 对应元素相乘 .表示元素的运算 6 A.* B 7 A. ^ 2 8 9 v = [1;2;3;] 10 1 ./v 11 1 ./A 12 // 以e为底,以v中元素为指数的幂运算 13 exp(v) 14 // 求绝对值 15 abs(v) 16 // v的相反数 17 -v 18 // 向量每个元素都加1 19 v + ones(length(v),1) 20 v + 1 21 // 转置 22 A 23 A' 24 a = [1 15 2 0,5] 25 val = max(a) 26 [val, ind] = max(a) 27 // 每列的最大值 28 max(A) 29 a = [1 15 2 0.5] 30 a < 5 31 // 找出小于3的元素并返回索引 32 find(a < 3) 33 // 任意行列对角线中的元素加起来都等于相同的值 34 A = magic(3) 35 //r 行 c列 36 [r,c] = find(A >= 7) 37 // 求和函数 38 a 39 sum(a) 40 // 相乘函数 41 prod(a) 42 // 向下取整 43 floor(a) 44 //向上取整 45 ceil(a) 46 // A的逆矩阵 47 A = magic(3) 48 pinv(A)
数据绘制
1 t = [0; 0.01;0.98]; 2 t 3 y1 = sin(2*pi*4*t); 4 plot(t,y1); 5 y2 = cos(2*pi*4*t); 6 plot(t,y2); 7 8 plot(t,y1); 9 hold on; 10 plot(t,y2,'r'); 11 xlabel('time') 12 ylabel('value') 13 legend('sin','cos') 14 title('my plot') 15 print -dpng 'myplot.png' 16 help plot 17 close 18 19 // 20 figure(1): plot(t,y1); 21 figure(2): plot(t,y2); 22 subplot(1,2,1); 23 plot(t,y1); 24 subplot(1,2,2); 25 plot(t,y2); 26 27 // 28 A = magic(5) 29 imagesc(A) 30 imagesc(A),colorbar,colormap gray;
控制语句
for循环
1 v = zeros(10,1) 2 for i = 1:10. 3 v(i) = 2^i; 4 end;
while循环
1 v 2 while i <= 5. 3 v(i) = 100; 4 i = i + 1; 5 end; 6 7 8 while true. 9 v(i) = 999; 10 i = i + 1; 11 if i == 6. 12 break; 13 end; 14 end;
if条件语句
1 if v(1) == 1. 2 disp('The value is one'); 3 elseif v(1) == 2. 4 disp('The value is two'); 5 else 6 disp('The value is not one or two'); 7 end;
函数
1 squareThisNumber(2) 2 [a,b] = squareAndCubeThisNumber(5)