模型簡介
Sequential(序貫模型)是函數式模型的簡略版,爲最簡單的線性、從頭到尾的結構順序,不分叉,是多個網絡層的線性堆疊。
構建方法
方法1:
from keras.models import Sequential
from keras.layers import Dense, Activation
model = Sequential([
Dense(32, input_shape=(784,)),
Activation('relu'),
Dense(10),
Activation('softmax'),
])
方法2:
model = Sequential()
model.add(Dense(32, input_dim=784))
model.add(Activation('relu'))
變量詳解
- Dense( batch_size, input_shape)
batch_size----批量,每批次讀入數量。沒有引入這一參數,那麼在訓練過程中所有的訓練數據直接輸入到網絡,導致泛化能力差,計算量龐大。詳見batch_size參數含義及設置方法
- Activation----激活函數
激活函數一般都直接選擇rule,所有函數詳見:激活函數詳解
- input_shape----模型輸入尺寸
模型需要知道它所期待的輸入的尺寸(shape)。
模型中的第一層(只有第一層,因爲下面的層可以自動的推斷尺寸)需要接收關於其輸入尺寸的信息,後面的各個層則可以自動的推導出中間數據的shape,因此不需要爲每個層都指定這個參數。
關於 input_shape
- 傳遞一個input_shape參數給第一層。它是一個表示尺寸的元組(一個整數或None的元組,其中None表示可能爲任何正整數)。在input_shape中不包含數據的batch大小。
- 某些 2D 層,例如 Dense,支持通過參數 input_dim 指定輸入尺寸,某些 3D 時序層支持 input_dim 和 input_length 參數。
- 如果你需要爲你的輸入指定一個固定的 batch 大小(這對 stateful RNNs 很有用),你可以傳遞一個 batch_size 參數給一個層。如果你同時將 batch_size=32 和 input_shape=(6, 8) 傳遞給一個層,那麼每一批輸入的尺寸就爲 (32,6,8)。
因此下面的方法是等價的
model = Sequential()
model.add(Dense(32, input_shape=(784,)))
model = Sequential()
model.add(Dense(32, input_dim=784))
下面的方法也是等價的
model = Sequential()
model.add(LSTM(32, input_shape=(10, 64)))
model = Sequential()
model.add(LSTM(32, batch_input_shape=(None, 10, 64)))
model = Sequential()
model.add(LSTM(32, input_length=10, input_dim=64))
配置學習過程
在訓練模型之前,我們需要配置學習過程,這是通過compile方法完成的,他接收三個參數:
- 優化器 optimizer----可以是現有優化器的字符串標識符,如 rmsprop 或 adagrad,也可以是 Optimizer 類的實例。詳見優化器詳解
- 損失函數 loss----模型試圖最小化的目標函數。它可以是現有損失函數的字符串標識符,如 categorical_crossentropy 或 mse,也可以是一個目標函數。詳見loss函數詳解
- 評估標準 metrics----對於任何分類問題,都希望將其設置爲 metrics = [‘accuracy’]。評估標準可以是現有的標準的字符串標識符,也可以是自定義的評估標準函數。
舉例:
# 多分類問題
model.compile(optimizer='rmsprop',
loss='categorical_crossentropy',
metrics=['accuracy'])
# 二分類問題
model.compile(optimizer='rmsprop',
loss='binary_crossentropy',
metrics=['accuracy'])
# 均方誤差迴歸問題
model.compile(optimizer='rmsprop',
loss='mse')
# 自定義評估標準函數
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])
訓練模型
Keras 模型在輸入數據和標籤的 Numpy 矩陣上進行訓練。爲了訓練一個模型,你通常會使用 fit 函數。Sequential模型API
# 對於具有2個類的單輸入模型(二進制分類):
model = Sequential()
model.add(Dense(32, activation='relu', input_dim=100))
model.add(Dense(1, activation='sigmoid'))
model.compile(optimizer='rmsprop',
loss='binary_crossentropy',
metrics=['accuracy'])
# 生成虛擬數據
import numpy as np
data = np.random.random((1000, 100))
labels = np.random.randint(2, size=(1000, 1))
# 訓練模型,以 32 個樣本爲一個 batch 進行迭代
model.fit(data, labels, epochs=10, batch_size=32)
# 對於具有10個類的單輸入模型(多分類分類):
model = Sequential()
model.add(Dense(32, activation='relu', input_dim=100))
model.add(Dense(10, activation='softmax'))
model.compile(optimizer='rmsprop',
loss='categorical_crossentropy',
metrics=['accuracy'])
# 生成虛擬數據
import numpy as np
data = np.random.random((1000, 100))
labels = np.random.randint(10, size=(1000, 1))
# 將標籤轉換爲分類的 one-hot 編碼
one_hot_labels = keras.utils.to_categorical(labels, num_classes=10)
# 訓練模型,以 32 個樣本爲一個 batch 進行迭代
model.fit(data, one_hot_labels, epochs=10, batch_size=32)
幾個實例
關於模型的幾個實例https://blog.csdn.net/weixin_41744624/article/details/106230551