Sequential模型
Sequential模型字面上的翻譯是順序模型凿可,感覺是簡單的線性模型裹粤,但實際上Sequential模型可以構(gòu)建非常復(fù)雜的神經(jīng)網(wǎng)絡(luò)拯坟,包括全連接神經(jīng)網(wǎng)絡(luò)、卷積神經(jīng)網(wǎng)絡(luò)(CNN)夕膀、循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)等等果善。Sequential更準確的理解應(yīng)該為堆疊讲逛,通過堆疊許多不同的層,構(gòu)建出深度神經(jīng)網(wǎng)絡(luò)岭埠。
Sequential模型的核心操作
最核心的操作是添加圖層盏混,以下收錄一些比較流行的圖層:
圖層名稱 | 操作方法 | 備注 |
---|---|---|
卷積層 | model.add(ConvnD(64, (3, 3), activation='relu')) | 對n(1,2,3)維輸入進行卷積操作 |
轉(zhuǎn)換層 | model.add(Reshape((3, 4), input_shape=(12,))) | Reshape層用來將輸入shape轉(zhuǎn)換為特定的shape |
全連接層 | model.add(Dense(256, activation='relu')) | 實現(xiàn)的運算是output = activation(dot(input, kernel)+bias)。其中activation是逐元素計算的激活函數(shù)惜论,kernel是本層的權(quán)值矩陣许赃,bias為偏置向量 |
dropout | model.add(Dropout(0.5)) | Dropout將在訓(xùn)練過程中每次更新參數(shù)時按一定概率(rate)隨機斷開輸入神經(jīng)元,Dropout層用于防止過擬合馆类。 |
Flattening layer(展平層) | model.add(Flatten()) | 將輸入“壓平”混聊,即把多維的輸入一維化,常用在從卷積層到全連接層的過渡乾巧。 |
備注:
可以參考官方介紹layer的中文文檔:https://keras-cn.readthedocs.io/en/latest/layers/about_layer/
Sequential模型開發(fā)流程
Sequential模型構(gòu)建通常5步:
1.定義模型
2.定義目標
3.輸入數(shù)據(jù)
4.訓(xùn)練模型
5.評估模型
Sequential模型實操
import keras
import numpy as np
import matplotlib.pyplot as plt
# Sequential按順序構(gòu)成的模型
from keras.models import Sequential
# Dense全連接層
from keras.layers import Dense, Activation
# 優(yōu)化器:隨機梯度下降
from keras.optimizers import SGD
# 生成非線性數(shù)據(jù)模型
import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt
#訓(xùn)練數(shù)據(jù)和測試數(shù)據(jù)
number = 100
x_data = np.linspace(-4, 4, number)
y_data = np.sin(x_data)+np.random.uniform(-0.5, 0.5, number)
print(x_data)
print(y_data)
# 顯示隨機點
plt.scatter(x_data, y_data)
plt.show()
##################################################################################
# 構(gòu)建一個順序模型
model = Sequential()
# 在模型中添加一個全連接層
# 神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu):1-10-1句喜,即輸入層為1個神經(jīng)元,隱藏層10個神經(jīng)元沟于,輸出層1個神經(jīng)元咳胃。
# 激活函數(shù)加法1
model.add(Dense(units=10, input_dim=1))
model.add(Activation('tanh'))
model.add(Dense(units=1))
model.add(Activation('tanh'))
# 定義優(yōu)化算法
sgd = SGD(lr=0.3)
# sgd: Stochastic gradient descent,隨機梯度下降法
# mse: Mean Squared Error, 均方誤差
model.compile(optimizer=sgd, loss='mse')
# 進行訓(xùn)練
for step in range(3000):
# 每次訓(xùn)練一個批次
cost = model.train_on_batch(x_data, y_data)
# 每500個batch打印一次cost值
if step % 200 == 0:
print('cost: ', cost)
# 打印權(quán)值和偏置值
W, b = model.layers[0].get_weights()
print('W:', W, ' b: ', b)
print(len(model.layers))
# 把x_data輸入網(wǎng)絡(luò)中,得到預(yù)測值y_pred
y_pred = model.predict(x_data)
# 顯示隨機點
plt.scatter(x_data, y_data)
# 顯示預(yù)測結(jié)果
plt.plot(x_data, y_pred, 'r-', lw=3)
plt.show()
上面的代碼中旷太,輸入層是全連接層展懈。接下來就是為模型添加中間層和輸出層。定義優(yōu)化器(并指定損失函數(shù))來指定反向傳播的計算方法供璧。在keras中存崖,Sequential模型的compile方法用來完成這一操作。
例如睡毒,在下面的這一行代碼中来惧,我們使用’sgd’優(yōu)化器,損失函數(shù)為’mse’演顾。
model.compile(optimizer=sgd, loss='mse')
創(chuàng)建了模型開始訓(xùn)練供搀。設(shè)置迭代次數(shù)、驗證數(shù)據(jù)集等等偶房。
cost = model.train_on_batch(x_data, y_data)
最后趁曼,使用predict方法來看看預(yù)測結(jié)果:
y_pred = model.predict(x_data)
以上就是在Keras中使用Sequential模型的基本構(gòu)建塊,相比tensorflow棕洋,keras的代碼更少,不用關(guān)心具體的算法實現(xiàn)乒融。
總結(jié)
keras中的Sequential模型其實非常強大掰盘,而且接口簡單易懂摄悯,大部分問題,只需要使用Sequential模型即可滿足需求愧捕。只是當工具使用即可奢驯,集中精力解決具體的問題。