似乎 KerasClassifier 對可定制模型做了一些包裝,但我不知道如何把它弄出來......
我想將我的 lstm 模型從幾乎沒有創建到 keras 包裝器,例如KerasClassifier:
model1 = Sequential()
model1.add(LSTM(units=60, activation='relu', input_shape=(60, 1),
return_sequences=True, recurrent_dropout=0.1))
model1.add(LSTM(units=30))
model1.add(Dense(units=1, activation='sigmoid'))
model1.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
到
def create_model():
model = Sequential()
model.add(LSTM(units=60, activation='relu', input_shape=(60, 1),
return_sequences=True, recurrent_dropout=0.1))
model.add(LSTM(units=30))
model.add(Dense(units=1, activation='sigmoid'))
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
return model
modelk = KerasClassifier(build_fn=create_model,
epochs=10,
batch_size=30,
verbose=0)
如果我model1.summary()使用model1回傳的第一種方法,我會得到類似:
Model: "sequential"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
lstm (LSTM) (None, 60, 60) 14880
lstm_1 (LSTM) (None, 30) 10920
dense (Dense) (None, 1) 31
=================================================================
Total params: 25,831
Trainable params: 25,831
Non-trainable params: 0
但是如果我使用modelk從第二種方法回傳的“modelk.summary()”,我會收到如下錯誤:
'KerasClassifier' object has no attribute 'summary'
uj5u.com熱心網友回復:
嘗試modelk.build_fn().summary():
from keras.models import Sequential
from keras.layers import Dense, LSTM
from keras.wrappers.scikit_learn import KerasClassifier
def create_model():
model = Sequential()
model.add(LSTM(units=60, activation='relu', input_shape=(60, 1),
return_sequences=True, recurrent_dropout=0.1))
model.add(LSTM(units=30))
model.add(Dense(units=1, activation='sigmoid'))
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
return model
modelk = KerasClassifier(build_fn=create_model,
epochs=10,
batch_size=30,
verbose=0)
print(modelk.build_fn().summary())
Model: "sequential_2"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
lstm_4 (LSTM) (None, 60, 60) 14880
lstm_5 (LSTM) (None, 30) 10920
dense_2 (Dense) (None, 1) 31
=================================================================
Total params: 25,831
Trainable params: 25,831
Non-trainable params: 0
_________________________________________________________________
None
您還可以做的是model.summary在內部使用,create_model并且在內部呼叫時將列印摘要model.fit:
from keras.models import Sequential
from keras.layers import Dense, LSTM
from keras.wrappers.scikit_learn import KerasClassifier
from sklearn.model_selection import GridSearchCV
import numpy as np
def create_model(optimizer='rmsprop'):
model = Sequential()
model.add(LSTM(units=60, activation='relu', input_shape=(60, 1),
return_sequences=True, recurrent_dropout=0.1))
model.add(LSTM(units=30))
model.add(Dense(units=1, activation='sigmoid'))
model.compile(optimizer=optimizer, loss='binary_crossentropy', metrics=['accuracy'])
print(model.summary())
return model
modelk = KerasClassifier(build_fn=create_model,
epochs=10,
batch_size=25,
verbose=0)
optimizers = ['rmsprop', 'adam']
param_grid = dict(optimizer=optimizers)
grid = GridSearchCV(estimator=modelk, param_grid=param_grid)
X = np.random.random((50, 60, 1))
Y = np.random.random((50,))
grid_result = grid.fit(X, Y)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/443835.html
上一篇:在SQL表中的XML資料列上使用WHERE條件選擇資料
下一篇:Keras序列模型中的資料增強層
