я учусь keras в эти дни, и я встретил ошибку при использовании scikit учиться API.Here является чем-то, может быть полезно:ошибки при использовании keras ска учиться API
СРЕДЫ:
python:3.5.2
keras:1.0.5
scikit-learn:0.17.1
КОД
import pandas as pd
from keras.layers import Input, Dense
from keras.models import Model
from keras.models import Sequential
from keras.wrappers.scikit_learn import KerasRegressor
from sklearn.cross_validation import train_test_split
from sklearn.cross_validation import cross_val_score
from sqlalchemy import create_engine
from sklearn.cross_validation import KFold
def read_db():
"get prepared data from mysql."
con_str = "mysql+mysqldb://root:[email protected]/nbse?charset=utf8"
engine = create_engine(con_str)
data = pd.read_sql_table('data_ml', engine)
return data
def nn_model():
"create a model."
model = Sequential()
model.add(Dense(output_dim=100, input_dim=105, activation='softplus'))
model.add(Dense(output_dim=1, input_dim=100, activation='softplus'))
model.compile(loss='mean_squared_error', optimizer='adam')
return model
data = read_db()
y = data.pop('PRICE').as_matrix()
x = data.as_matrix()
model = nn_model()
model = KerasRegressor(build_fn=model, nb_epoch=2)
model.fit(x,y) #something wrong here!
ОШИБКА
Traceback (most recent call last):
File "C:/Users/Administrator/PycharmProjects/forecast/gridsearch.py", line 43, in <module>
model.fit(x,y)
File "D:\Program Files\Python35\lib\site-packages\keras\wrappers\scikit_learn.py", line 135, in fit
**self.filter_sk_params(self.build_fn.__call__))
TypeError: __call__() missing 1 required positional argument: 'x'
Process finished with exit code 1
модель хорошо работает без упаковки с kerasRegressor, но я хочу, используя gridSearch sk_learn после этого, так что я нахожусь здесь для помощи. Я пытался, но до сих пор не знаю.
что-то может быть полезно:
keras.warappers.scikit_learn.py
class BaseWrapper(object):
def __init__(self, build_fn=None, **sk_params):
self.build_fn = build_fn
self.sk_params = sk_params
self.check_params(sk_params)
def fit(self, X, y, **kwargs):
'''Construct a new model with build_fn and fit the model according
to the given training data.
# Arguments
X : array-like, shape `(n_samples, n_features)`
Training samples where n_samples in the number of samples
and n_features is the number of features.
y : array-like, shape `(n_samples,)` or `(n_samples, n_outputs)`
True labels for X.
kwargs: dictionary arguments
Legal arguments are the arguments of `Sequential.fit`
# Returns
history : object
details about the training history at each epoch.
'''
if self.build_fn is None:
self.model = self.__call__(**self.filter_sk_params(self.__call__))
elif not isinstance(self.build_fn, types.FunctionType):
self.model = self.build_fn(
**self.filter_sk_params(self.build_fn.__call__))
else:
self.model = self.build_fn(**self.filter_sk_params(self.build_fn))
loss_name = self.model.loss
if hasattr(loss_name, '__name__'):
loss_name = loss_name.__name__
if loss_name == 'categorical_crossentropy' and len(y.shape) != 2:
y = to_categorical(y)
fit_args = copy.deepcopy(self.filter_sk_params(Sequential.fit))
fit_args.update(kwargs)
history = self.model.fit(X, y, **fit_args)
return history
ошибка occored в этой строке:
self.model = self.build_fn(
**self.filter_sk_params(self.build_fn.__call__))
self.build_fn здесь является keras.models.Sequential
models.py
class Sequential(Model):
def call(self, x, mask=None):
if not self.built:
self.build()
return self.model.call(x, mask)
Так , что означает, что x означает d как исправить эту ошибку?
Спасибо!
Большое спасибо !!!!!!!!!!!!!!!!!!!!! это сработало, – xiao
@matsuninja Знаете ли вы, как передать параметры функции? Я хотел бы создать более общую функцию «nn_model» с разными размерами слоев и такими параметрами ... – Luis
@ Luis, в приведенном выше примере, помните, что код внутри функции nn_model определяет параметры модели (включая размеры слоев и т. Д.). .). Мое предложенное решение (опять же, только одна из нескольких альтернатив) передает функцию nn_model как значение build_fn. Чтобы установить параметры модели, измените код в функции nn_model; это на самом деле то, что делает xiao при определении функции nn_model. Надеюсь, это поможет. – matsuninja