keras定義:
Keras是一個深度學習API(人工神經網絡庫),使用Python語言編寫的github開源項目,主要開發者為谷歌工程師。Keras底層可調用不同的機器學習平臺,如TensorFlow、Theano或micsoft-CNTK。
作用:keras主要功能是簡化機器學習平臺的調用方式。
調用流程:
大概流程:根據輸入(訓練數據集)和輸出(測試數據集),推測出中間邏輯和關系。
需求:使用深度學習來識別手寫字識別
1.加載數據集。數據集包括:訓練數據集和測試數據集
from keras.datasets import mnist
path = r'C:\Users\LEGION\Desktop\datasets\mnist.npz'
(X_train, y_train), (X_test, y_test) = mnist.load_data(path)
print(X_train.shape)
print(y_train.shape)
print(X_test.shape)
print(y_test.shape)
X_train.shape 的形狀為(60000, 28, 28)
y_train.shape的形狀為(60000,)
X_test.shape的形狀為(10000, 28, 28)
y_test.shape的形狀為(10000,)
2.構建模型
from keras.models import Sequentialfrom keras.layers import Dense,Activationmodel = Sequential()model.add(Dense(512, input_shape=(28*28,),activation='relu'))model.add(Dense(10,activation='softmax'))model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])model.fit(X_train, y_train, epochs=10, batch_size=64, verbose=1, validation_split=0.05)Testloss, Testaccuracy = model.evaluate(X_test, y_test)print('Testloss ', Testloss)print('Testaccuracy:', Testaccuracy)
- 第三行代碼,定義模型類型,表示使用Keras中的Sequential?順序模型。
- 第四行代碼表示增加一個全連接層(密集層),這層有512個神經元,輸入形狀是(28*28,)此處的輸入形狀也可以寫為:input_dim=28*28。Activation表示這層的激活函數使用是relu,不同的激活函數有不同的效果,大家可以自己學習。
- 第五行代碼增加一個全連接層,這層有10個神經元,這于我們的期望輸出個數一致(10個數字),激活函數使用softmax。
- 第六行代碼表示編譯我們之前構建的模型,優化器選擇adam,損失函數為categorical_crossentropy,指標度量選擇accuracy精度。
- 第七行代碼表示使用訓練集數據來訓練我們的模型,epochs表示模型的訓練的時期數,每個epoch是對x,y的整個迭代,這里迭代10次。batch_size代表每個梯度更新的樣本數,默認值為32. verbose:日志顯示verbose = 0為不在標準輸出流輸出日志信息,verbose = 1為輸出進度條記錄,verbose=2為每個epoch輸出一行記錄,默認為1。validation_split按一定比例從訓練集中取出一部分作為驗證集。最后一行控制臺輸出:loss: 0.0109 - acc: 0.9964 - val_loss: 0.0862 - val_acc: 0.9823
- 第八行代碼表示對已經訓練好的模型在驗證集上進行評價,打印出驗證集上的損失和精度為:loss 0.0794 ,Accuracy: 0.9784。
- 第八行后一般會出現model.predict([np.array([features[1]]), sentence]),預測
phthon基礎
r
path = r'C:\Users\LEGION\Desktop\datasets\mnist.npz'
轉義字符來表示反斜杠
shape
通俗易懂的解釋:每一個shape里的數字對應數組中的一對中括號,第一個數字1表示最外層的中括號。以此類推,數字2表示第二層中括號,數字3表示最里層的中括號。
reshape?
數組array的合并
astype? ?
字符轉數字?
X_train = X_train.astype('float32')/255
數學基礎
二維數組的賦值:
向量:
向量維度:
思考:
數據集用什么工具生成,數據格式有什么要求
訓練后的數據如何保存,如何在訓練后的模型上進行識別
識別的命令是什么,輸入參數是什么。
from keras.models import Input,Model
from keras.layers import Dense,Conv2D,TimeDistributedinput_ = Input(shape=(12,32,32,3))
out = TimeDistributed(Conv2D(filters=32,kernel_size=(3,3),padding='same'))(input_)
model = Model(inputs=input_,outputs=out)
model.summary()
卷積操作使用TimeDistributed,第一個12代表就是時間序列,32,32,3指的是高,寬,通道數。此處一共有896個參數,卷積核weights有3×3×3×32=864個,卷積核bias有32個。