Я могу запустить обе модели поиска, но только когда я перезагружаю Ядро, соответственно, повторяю все шаги с начала (загрузка данных и т. Д.). Я хочу сравнить GridSearchCV
с RandomizedSearchCV
только из любопытства:
def create_model(activation='relu', optimizer='adam', init='he_normal', metrics=['accuracy'], dropout_rate=0):
model = Sequential()
model.add(Dense(...)
model.compile(loss = 'mean_squared_error', optimizer = 'adam', metrics = ['accuracy'])
return model
# define the grid search parameters
batch_size = [2, 4]
epochs = [1, 3]
activation = ['relu', 'tanh']
optimizer = ['RMSprop', 'Adam', 'Adamax', 'sgd'],
metrics = ['mean_squared_error'],
loss = ['mean_squared_error']
dropout_rate = [0.2, 0.3, 0.4, 0.5]
# search_model = GridSearchCV or RandomSearchCV
gridsearch = False
if(gridsearch):
param_grid = dict(batch_size=batch_size
, epochs=epochs
, activation = activation
# , optimizer = optimizer
# , metrics = metrics
# , loss = loss
# , dropout_rate = dropout_rate
)
search_model = GridSearchCV
hypparas = param_grid
else:
param_dist = dict(batch_size=batch_size
, epochs=epochs
, activation = activation
# , optimizer = optimizer
# , metrics = metrics
# , loss = loss
# , dropout_rate = dropout_rate
)
search_model = RandomizedSearchCV
hypparas = param_dist
# create model
model = KerasRegressor(build_fn=create_model, verbose=0)
if(gridsearch):
model_cv = search_model(estimator=model,
param_grid=hypparas,
n_jobs=1,
cv=2)
else:
model_cv = search_model(estimator=model,
param_distributions=hypparas,
n_jobs=1,
cv=5)
time_callback = TimeHistory()
# Fit
X = X_train1
y = y_train1
model_cv_result = model_cv.fit(X, y
, callbacks = [time_callback]
)
Когда я изменяю gridsearch = False
на gridsearch = True
, таким образом, переключаясь с GridSearchCV
на RandomizedSearchCV
и повторяяоттуда я получаю сообщение об ошибке: AttributeError: 'float' object has no attribute 'time'
C:\ProgramData\Anaconda3\lib\site-packages\sklearn\model_selection\_validation.py:528: FutureWarning: From version 0.22, errors during fit will result in a cross validation score of NaN by default. Use error_score='raise' if you want an exception raised or error_score=np.nan to adopt the behavior from version 0.22.
FutureWarning)
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-162-9c9a4d6ea766> in <module>
14 y = y_train1
15 model_cv_result = model_cv.fit(X, y
---> 16 , callbacks = [time_callback]
17 )
18
C:\ProgramData\Anaconda3\lib\site-packages\sklearn\model_selection\_search.py in fit(self, X, y, groups, **fit_params)
685 return results
686
--> 687 self._run_search(evaluate_candidates)
688
689 # For multi-metric evaluation, store the best_index_, best_params_ and
C:\ProgramData\Anaconda3\lib\site-packages\sklearn\model_selection\_search.py in _run_search(self, evaluate_candidates)
1146 def _run_search(self, evaluate_candidates):
1147 """Search all candidates in param_grid"""
-> 1148 evaluate_candidates(ParameterGrid(self.param_grid))
1149
1150
C:\ProgramData\Anaconda3\lib\site-packages\sklearn\model_selection\_search.py in evaluate_candidates(candidate_params)
664 for parameters, (train, test)
665 in product(candidate_params,
--> 666 cv.split(X, y, groups)))
667
668 if len(out) < 1:
C:\ProgramData\Anaconda3\lib\site-packages\joblib\parallel.py in __call__(self, iterable)
919 # remaining jobs.
920 self._iterating = False
--> 921 if self.dispatch_one_batch(iterator):
922 self._iterating = self._original_iterator is not None
923
C:\ProgramData\Anaconda3\lib\site-packages\joblib\parallel.py in dispatch_one_batch(self, iterator)
757 return False
758 else:
--> 759 self._dispatch(tasks)
760 return True
761
C:\ProgramData\Anaconda3\lib\site-packages\joblib\parallel.py in _dispatch(self, batch)
714 with self._lock:
715 job_idx = len(self._jobs)
--> 716 job = self._backend.apply_async(batch, callback=cb)
717 # A job can complete so quickly than its callback is
718 # called before we get here, causing self._jobs to
C:\ProgramData\Anaconda3\lib\site-packages\joblib\_parallel_backends.py in apply_async(self, func, callback)
180 def apply_async(self, func, callback=None):
181 """Schedule a func to be run"""
--> 182 result = ImmediateResult(func)
183 if callback:
184 callback(result)
C:\ProgramData\Anaconda3\lib\site-packages\joblib\_parallel_backends.py in __init__(self, batch)
547 # Don't delay the application, to avoid keeping the input
548 # arguments in memory
--> 549 self.results = batch()
550
551 def get(self):
C:\ProgramData\Anaconda3\lib\site-packages\joblib\parallel.py in __call__(self)
223 with parallel_backend(self._backend, n_jobs=self._n_jobs):
224 return [func(*args, **kwargs)
--> 225 for func, args, kwargs in self.items]
226
227 def __len__(self):
C:\ProgramData\Anaconda3\lib\site-packages\joblib\parallel.py in <listcomp>(.0)
223 with parallel_backend(self._backend, n_jobs=self._n_jobs):
224 return [func(*args, **kwargs)
--> 225 for func, args, kwargs in self.items]
226
227 def __len__(self):
C:\ProgramData\Anaconda3\lib\site-packages\sklearn\model_selection\_validation.py in _fit_and_score(estimator, X, y, scorer, train, test, verbose, parameters, fit_params, return_train_score, return_parameters, return_n_test_samples, return_times, return_estimator, error_score)
512 estimator.fit(X_train, **fit_params)
513 else:
--> 514 estimator.fit(X_train, y_train, **fit_params)
515
516 except Exception as e:
C:\ProgramData\Anaconda3\lib\site-packages\keras\wrappers\scikit_learn.py in fit(self, x, y, **kwargs)
149 fit_args.update(kwargs)
150
--> 151 history = self.model.fit(x, y, **fit_args)
152
153 return history
C:\ProgramData\Anaconda3\lib\site-packages\keras\engine\training.py in fit(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, validation_freq, max_queue_size, workers, use_multiprocessing, **kwargs)
1237 steps_per_epoch=steps_per_epoch,
1238 validation_steps=validation_steps,
-> 1239 validation_freq=validation_freq)
1240
1241 def evaluate(self,
C:\ProgramData\Anaconda3\lib\site-packages\keras\engine\training_arrays.py in fit_loop(model, fit_function, fit_inputs, out_labels, batch_size, epochs, verbose, callbacks, val_function, val_inputs, shuffle, initial_epoch, steps_per_epoch, validation_steps, validation_freq)
144 for epoch in range(initial_epoch, epochs):
145 model.reset_metrics()
--> 146 callbacks.on_epoch_begin(epoch)
147 epoch_logs = {}
148 if steps_per_epoch is not None:
C:\ProgramData\Anaconda3\lib\site-packages\keras\callbacks\callbacks.py in on_epoch_begin(self, epoch, logs)
134 logs = logs or {}
135 for callback in self.callbacks:
--> 136 callback.on_epoch_begin(epoch, logs)
137 self._reset_batch_timing()
138
<ipython-input-121-c4f8115d9239> in on_epoch_begin(self, epoch, logs)
19 self.times = []
20 def on_epoch_begin(self, epoch, logs={}):
---> 21 self.epoch_time_start = time.time()
22 def on_epoch_end(self, epoch, logs={}):
23 self.times.append(time.time() - self.epoch_time_start)
AttributeError: 'float' object has no attribute 'time'