keras:返回 model.summary() 与 scikit 学习包装器
keras: returning model.summary() vs scikit learn wrapper
在使用 keras 时,我了解到使用包装器会对 keras 和 scikit learn api 请求产生不利影响。我对同时拥有两者的解决方案感兴趣。
变体 1:scikit 包装器
from keras.wrappers.scikit_learn import KerasClassifier
def model():
model = Sequential()
model.add(Dense(10, input_dim=4, activation='relu'))
model.add(Dense(3, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
return model
estimator = KerasClassifier(build_fn=model, epochs=100, batch_size=5)
model.fit(X, y)
-> 这让我可以打印 scikit 命令,例如 accuracy_score() 或 classification_report()。但是,model.summary() 不起作用:
AttributeError: 'KerasClassifier' object has no attribute 'summary'
变体 2:无包装
model = Sequential()
model.add(Dense(10, input_dim=4, activation='relu'))
model.add(Dense(3, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(X, y, epochs=100, batch_size=5)
-> 这让我打印 model.summary() 而不是 scikit 命令。
ValueError: Mix type of y not allowed, got types {'multiclass',
'multilabel-indicator'}
有没有一种方法可以同时使用两者?
总结的函数在这个库中:from keras. models import Model
你可以看到这个:
KerasClassifier
只是 keras
中实际 Model
的包装器,因此可以将 keras api 的实际方法路由到 scikit 中使用的方法,因此它可以与 scikit 实用程序结合使用。但在内部它只使用可以通过使用 estimator.model
.
访问的模型
说明上述内容的示例:
from keras.models import Sequential
from keras.layers import Dense
from keras.wrappers.scikit_learn import KerasClassifier
from sklearn.datasets import make_classification
def model():
model = Sequential()
model.add(Dense(10, input_dim=20, activation='relu'))
model.add(Dense(2, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
return model
estimator = KerasClassifier(build_fn=model, epochs=100, batch_size=5)
X, y = make_classification()
estimator.fit(X, y)
# This is what you need
estimator.model.summary()
这个输出是:
Layer (type) Output Shape Param #
=================================================================
dense_9 (Dense) (None, 10) 210
_________________________________________________________________
dense_10 (Dense) (None, 2) 22
=================================================================
Total params: 232
Trainable params: 232
Non-trainable params: 0
_________________________________________________________________
在使用 keras 时,我了解到使用包装器会对 keras 和 scikit learn api 请求产生不利影响。我对同时拥有两者的解决方案感兴趣。
变体 1:scikit 包装器
from keras.wrappers.scikit_learn import KerasClassifier
def model():
model = Sequential()
model.add(Dense(10, input_dim=4, activation='relu'))
model.add(Dense(3, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
return model
estimator = KerasClassifier(build_fn=model, epochs=100, batch_size=5)
model.fit(X, y)
-> 这让我可以打印 scikit 命令,例如 accuracy_score() 或 classification_report()。但是,model.summary() 不起作用:
AttributeError: 'KerasClassifier' object has no attribute 'summary'
变体 2:无包装
model = Sequential()
model.add(Dense(10, input_dim=4, activation='relu'))
model.add(Dense(3, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(X, y, epochs=100, batch_size=5)
-> 这让我打印 model.summary() 而不是 scikit 命令。
ValueError: Mix type of y not allowed, got types {'multiclass', 'multilabel-indicator'}
有没有一种方法可以同时使用两者?
总结的函数在这个库中:from keras. models import Model
你可以看到这个:
KerasClassifier
只是 keras
中实际 Model
的包装器,因此可以将 keras api 的实际方法路由到 scikit 中使用的方法,因此它可以与 scikit 实用程序结合使用。但在内部它只使用可以通过使用 estimator.model
.
说明上述内容的示例:
from keras.models import Sequential
from keras.layers import Dense
from keras.wrappers.scikit_learn import KerasClassifier
from sklearn.datasets import make_classification
def model():
model = Sequential()
model.add(Dense(10, input_dim=20, activation='relu'))
model.add(Dense(2, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
return model
estimator = KerasClassifier(build_fn=model, epochs=100, batch_size=5)
X, y = make_classification()
estimator.fit(X, y)
# This is what you need
estimator.model.summary()
这个输出是:
Layer (type) Output Shape Param #
=================================================================
dense_9 (Dense) (None, 10) 210
_________________________________________________________________
dense_10 (Dense) (None, 2) 22
=================================================================
Total params: 232
Trainable params: 232
Non-trainable params: 0
_________________________________________________________________