本文是參考吳恩達老師的深度學習視頻而做的筆記
深度學習
引言
挑戰:AI真正的挑戰在於解決那些對人類來說很容易執行,但很難形式化描述的問題,比如識別人們所說的話/圖像中的臉/分辨蘋果和梨。
解決方案:讓計算機從經驗中學習,並根據層次化的概念體系理解世界,而每個概念是通過與某些相對簡單的概念之間的關系來定義的。而如何繪制出這種關系,就是我們常說的深度學習。
區別
機器學習:AI系統需要具備自己獲取知識的能力,即從原始數據中提取模式的能力。即研究人員不會編寫指令控制機器,而是用大量數據和算法“訓練”機器,讓機器自己學會如何執行任務。
Octave的安裝和使用
安裝
brew update && brew upgrade
brew install gcc
brew install octave
注:不要安裝4.0.0版本,該版本有重大bug.
使用
基本操作
加、減、乘、除
// 加
1+2
// 減
6-2
// 乘
3*4
//除
1/2
// 指數運算
2^3
邏輯運算
// 相等
1 == 2 % 注釋內容
//不相等
1 ~= 2 % true
// 邏輯與
1 && 0 % false
// 邏輯或
1 || 0 % true
// 異或
xor(1,0)
修改提示符
PS1('>> ');
變量
a = 3
a = 3; % 阻止打印輸出
打印或顯示一個變量
a
disp(a)
// 顯示默認位數
format long
a
format short
a
向量和矩陣
// 矩陣
A = [1 2; 3 4; 5 6]
// 行向量
v = [1 2 3]
// 列向量
v = [1; 2; 3]
//矩陣的其他生成
v = 1:0.1:2
v = 1:6
ones(2,3)
C = 2*ones(2,3)
w = ones(1,3)
w = zeros(1,3)
// 隨機矩陣,數值0-1
w = rand(3,3)
// 服從正態分布
w = randn(1,3)
//
w = -6 + sqrt(10)*(rand(1,10000));
// 繪制成直方圖
hist(w)
hist(w,50)
// 單位矩陣
I = eye(4)
//幫助指令
help eye
help help
移動數據
A = [1 2; 3 4; 5 6]
// 矩陣維度
size(A)
sz = size(A)
size(sz)
//A矩陣第1維度的大小
size(A,1)
//A矩陣第2維度的大小
size(A,2)
// 矩陣兩維度的最大值
v = [1 2 3 4]
length(v)
length(A)
導入數據
// 顯示當前目錄
pwd
cd ''
ls
// 導入數據
load house.dat
load price.dat
// 顯示當前在內存中的變量
who
// 顯示更詳細的變量信息
whos
// 顯示house.dat中的數據集
house
size(house)
size(price)
// 刪除某個變量
clear price
// 清理工作空間
clear
// 賦值變量
v = priceY(1:5)
導出數據
// 存入硬盤
save hello.mat v;
save hello.txt v -ascii;
操作數據
索引操作
A = [1 2; 3 4; 5 6;]
// 第3行第2列的元素
A(3,2)
// 第2行所有元素
A(2,:)
// 第1列所欲元素
A(:,1)
// 第1行和第3行的所有元素
A([1 3],:)
// 將A的第2列賦值成[10;11;12;]
A(:,2) = [10;11;12;]
// 添加第3列
A = [A, [100; 101; 102;]
// 把A中所有元素放入一個單獨的列向量
A(:)
// 結合矩陣
A = [1 2; 3 4; 5 6;]
B = [11 12 13; 14 15 16;]
C = [A B]
C = [A ; B]
計算數據
A = [1 2; 3 4;5 6]
B = [11 12;13 14; 15 16;]
C = [1 1;2 2;]
A * C
// 對應元素相乘 .表示元素的運算
A.* B
A. ^ 2
v = [1;2;3;]
1 ./v
1 ./A
// 以e為底,以v中元素為指數的冪運算
exp(v)
// 求絕對值
abs(v)
// v的相反數
-v
// 向量每個元素都加1
v + ones(length(v),1)
v + 1
// 轉置
A
A'
a = [1 15 2 0,5]
val = max(a)
[val, ind] = max(a)
// 每列的最大值
max(A)
a = [1 15 2 0.5]
a < 5
// 找出小於3的元素並返回索引
find(a < 3)
// 任意行列對角線中的元素加起來都等於相同的值
A = magic(3)
//r 行 c列
[r,c] = find(A >= 7)
// 求和函數
a
sum(a)
// 相乘函數
prod(a)
// 向下取整
floor(a)
//向上取整
ceil(a)
// A的逆矩陣
A = magic(3)
pinv(A)
數據繪制
t = [0; 0.01;0.98];
t
y1 = sin(2*pi*4*t);
plot(t,y1);
y2 = cos(2*pi*4*t);
plot(t,y2);
plot(t,y1);
hold on;
plot(t,y2,'r');
xlabel('time')
ylabel('value')
legend('sin','cos')
title('my plot')
print -dpng 'myplot.png'
help plot
close
//
figure(1): plot(t,y1);
figure(2): plot(t,y2);
subplot(1,2,1);
plot(t,y1);
subplot(1,2,2);
plot(t,y2);
//
A = magic(5)
imagesc(A)
imagesc(A),colorbar,colormap gray;
控制語句
for循環
v = zeros(10,1)
for i = 1:10.
v(i) = 2^i;
end;
while循環
v
while i <= 5.
v(i) = 100;
i = i + 1;
end;
while true.
v(i) = 999;
i = i + 1;
if i == 6.
break;
end;
end;
if條件語句
if v(1) == 1.
disp('The value is one');
elseif v(1) == 2.
disp('The value is two');
else
disp('The value is not one or two');
end;
函數
squareThisNumber(2)
[a,b] = squareAndCubeThisNumber(5)