1.簡述人工智能、機器學習和深度學習三者的聯繫與區別。git
人工智能最大,根本在於智能;機器學習次之,機器學習是實現人工智能的一種方法;深度學習最後,但深度學習是實現機器學習的一種核心技術。瀏覽器
2. 全鏈接神經網絡與卷積神經網絡的聯繫與區別。網絡
卷積神經網絡中的每個節點就是一個神經元。在全鏈接神經網絡中,每相鄰兩層之間的節點都有邊相連,因而會將每一層的全鏈接層中的節點組織成一列,這樣方便顯示鏈接結構。而對於卷積神經網絡,相鄰兩層之間只有部分節點相連,爲了展現每一層神經元的維度,通常會將每一層卷積層的節點組織成一個三維矩陣。除告終構類似,卷積神經網絡的輸入輸出以及訓練的流程和全鏈接神經網絡也基本一致。全鏈接神經網絡和卷積神經網絡的惟一區別就是神經網絡相鄰兩層的鏈接方式。數據結構
3.理解卷積計算。機器學習
以digit0爲例,進行手工演算。函數
卷積核:學習
1 | 0 | -1 |
1 | 0 | -1 |
1 | 0 | -1 |
選擇第一個進行卷積操做:獲得6x6的矩陣:人工智能
from sklearn.datasets import load_digits #小數據集8*8spa
digits = load_digits().net
0 | 0 | 5 | 13 | 9 | 1 | 0 | 0 |
0 | 0 | 13 | 15 | 10 | 15 | 5 | 0 |
0 | 3 | 15 | 2 | 0 | 11 | 8 | 0 |
0 | 4 | 12 | 0 | 0 | 8 | 8 | 0 |
0 | 5 | 8 | 0 | 0 | 9 | 8 | 0 |
0 | 4 | 11 | 0 | 1 | 12 | 7 | 0 |
0 | 2 | 14 | 5 | 10 | 12 | 0 | 0 |
0 | 0 | 6 | 13 | 10 | 0 | 0 | 0 |
4.理解卷積如何提取圖像特徵。
讀取一個圖像;
如下矩陣爲卷積核進行卷積操做;
顯示卷積以後的圖像,觀察提取到什麼特徵。
1 | 0 | -1 |
1 | 0 | -1 |
1 | 0 | -1 |
1 | 1 | 1 |
0 | 0 | 0 |
-1 | -1 | -1 |
-1 | -1 | -1 |
-1 | 8 | -1 |
-1 | -1 | -1 |
卷積API
scipy.signal.convolve2d
tf.keras.layers.Conv2D
1 from PIL import Image 2 import matplotlib.pyplot as plt 3 import numpy as np 4 from scipy.signal import convolve2d 5 6 I = Image.open(r'D:\Chrome瀏覽器下載\90905.jpg') 7 L = I.convert('L') 8 9 ghost = np.array(I) 10 ghosts = np.array(L) 11 12 k1 = np.array([[1,0,-1],[1,0,-1],[1,0,-1]]) #垂直邊緣 13 k2 = np.array([[1,1,1],[0,0,0],[-1,-1,-1]]) #水平邊緣 14 k3 = np.array([[-1,-1,-1],[-1,8,-1],[-1,-1,-1]]) 15 16 ghost1 = convolve2d(ghosts,k1,boundary='symm',mode='same') 17 ghost2 = convolve2d(ghosts,k2,boundary='symm',mode='same') 18 ghost3 = convolve2d(ghosts,k3,boundary='symm',mode='same') 19 plt.matshow(ghost) 20 plt.matshow(ghost1) 21 # plt.matshow(ghost0) 22 plt.matshow(ghost2) 23 plt.matshow(ghost3) 24 25 plt.show()
原圖:
提取垂直邊緣的圖像:
提取水平邊緣的圖像:
提取邊緣特徵圖像:
5. 安裝Tensorflow,keras
參考:http://www.javashuo.com/article/p-adyzerbi-do.html
6. 設計手寫數字識別模型結構,注意數據維度的變化。
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Flatten, Conv2D, MaxPool2D
model = tf.keras.Sequential()
model.add(Conv2D(…))
model.add(MaxPool2D(…))
...
#能夠上傳手動演算的每層數據結構的變化過程。model.summary()
參考:
https://www.jianshu.com/p/afe485aa08ce
https://blog.csdn.net/junjun150013652/article/details/82217571
源代碼:
1 # 導入相關包 2 from tensorflow.keras.models import Sequential 3 from tensorflow.keras.layers import Dense, Dropout, Flatten, Conv2D, MaxPool2D 4 5 # 創建模型 6 model = Sequential() 7 8 # 一層卷積 9 model.add(Conv2D(filters=16,kernel_size=(5, 5),padding='same',input_shape=(28, 28, 1),activation='relu')) 10 # 池化層1 11 model.add(MaxPool2D(pool_size=(2, 2))) 12 model.add(Dropout(0.25)) 13 # 二層卷積 14 model.add(Conv2D(filters=32,kernel_size=(5, 5),padding='same',activation='relu')) 15 # 池化層2 16 model.add(MaxPool2D(pool_size=(2, 2))) 17 model.add(Dropout(0.25)) 18 # 三層卷積 19 model.add(Conv2D(filters=64,kernel_size=(5, 5),padding='same',activation='relu')) 20 21 model.add(Flatten()) # 平坦層 22 model.add(Dense(128, activation='relu')) # 全鏈接層 23 model.add(Dropout(0.25)) 24 model.add(Dense(10, activation='softmax')) # 激活函數 25 ##顯示每層數據的結構變化過程 26 print('每層數據的結構變化過程:') 27 model.summary()