Python神經網絡模型--Sequential詳解及樣例

模型簡介

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章