做一個深度學(xué)習(xí)的項目取逾,開始必須要搭建一個模型耗绿,我們通過代碼逐步了解keras的模型的搭建
深度學(xué)習(xí)模型
定義模型
序貫?zāi)P褪嵌鄠€網(wǎng)絡(luò)層的線性堆疊,也就是“一條路走到黑”砾隅。
- 可以通過向Sequential模型傳遞一個layer的list來構(gòu)造該模型
- 也可以通過.add()方法一個個的將layer加入模型中
模型需要知道輸入數(shù)據(jù)的shape误阻,因此,Sequential的第一層需要接受一個關(guān)于輸入數(shù)據(jù)shape的參數(shù).
- 傳遞一個input_shape的關(guān)鍵字參數(shù)給第一層
- 有些2D層晴埂,如Dense究反,支持通過指定其輸入維度input_dim來隱含的指定輸入數(shù)據(jù)shape。
- 如果你需要為輸入指定一個固定大小的batch_size(常用于stateful RNN網(wǎng)絡(luò))儒洛,可以傳遞batch_size參數(shù)到一個層中精耐,例如你想指定輸入張量的batch大小是32,數(shù)據(jù)shape是(6琅锻,8)卦停,則你需要傳遞batch_size=32和input_shape=(6,8)
編譯
在訓(xùn)練模型之前,我們需要通過compile來對學(xué)習(xí)過程進行配置恼蓬。compile接收三個參數(shù):
- 優(yōu)化器optimizer:該參數(shù)可指定為已預(yù)定義的優(yōu)化器名惊完,如rmsprop、adagrad处硬,或一個Optimizer類的對象小槐,詳情見optimizers
- 損失函數(shù)loss:該參數(shù)為模型試圖最小化的目標(biāo)函數(shù),它可為預(yù)定義的損失函數(shù)名荷辕,如categorical_crossentropy凿跳、mse件豌,也可以為一個損失函數(shù)。詳情見losses
- 指標(biāo)列表metrics:對分類問題控嗜,我們一般將該列表設(shè)置為metrics=['accuracy']茧彤。指標(biāo)可以是一個預(yù)定義指標(biāo)的名字,也可以是一個用戶定制的函數(shù).指標(biāo)函數(shù)應(yīng)該返回單個張量,或一個完成metric_name - > metric_value映射的字典.
# For a multi-class classification problem
model.compile(optimizer='rmsprop',
loss='categorical_crossentropy',
metrics=['accuracy'])
# For a binary classification problem
model.compile(optimizer='rmsprop',
loss='binary_crossentropy',
metrics=['accuracy'])
# For a mean squared error regression problem
model.compile(optimizer='rmsprop',
loss='mse')
# For custom metrics
import keras.backend as K
def mean_pred(y_true, y_pred):
return K.mean(y_pred)
model.compile(optimizer='rmsprop',
loss='binary_crossentropy',
metrics=['accuracy', mean_pred])
快速開始序貫(Sequential)模型
from keras.models import Sequential
from keras.layers import Dense, Activation
from IPython.display import SVG
from keras.utils.vis_utils import model_to_dot
import pandas as pd
import matplotlib.pyplot as plt
# 定義模型
model = Sequential()
model.add(Dense(32, input_shape=(784,)))
model.add(Activation('relu'))
model.add(Dense(10))
model.add(Activation('softmax'))
model.compile(optimizer='rmsprop',loss='categorical_crossentropy',metrics=['accuracy'])
model.summary()
SVG(model_to_dot(model,show_shapes=True).create(prog='dot', format='svg'))
Layer (type) Output Shape Param #
dense_9 (Dense) (None, 32) 25120
activation_6 (Activation) (None, 32) 0
dense_10 (Dense) (None, 10) 330
activation_7 (Activation) (None, 10) 0
Total params: 25,450
Trainable params: 25,450
Non-trainable params: 0
模型