В этой статье представлены некоторые распространенные методы проверки и настройки параметров в Keras для быстрой проверки модели и настройки суперпараметров (Super Parameters).
Советы:
- Загрузка файла данных CSV
- Предупреждение о плотной инициализации
Проверьте и настройте параметры:
- Проверка модели
- K-кратная перекрестная проверка
- Перекрестная проверка поиска по сетке
Загрузка файла данных CSV
Использование NumPyloadtxt()Способ загрузки файла данных CSV
- разделитель: разделитель блока данных;
- skiprows: пропустить первую строку заголовков;
dataset = np.loadtxt(raw_path, delimiter=',', skiprows=1)
Предупреждение о плотной инициализации
Предупреждение для плотных параметров инициализации:
UserWarning: Update your `Dense` call to the Keras 2 API
`Dense(units=12, activation="relu", kernel_initializer="uniform")`
output = Dense(units=12, init='uniform', activation='relu')(main_input)
Замените параметр init сkernel_initializer
параметры.
Проверка модели
существуетfit()серединаавтоматическийРазделите набор проверки:
По настройке параметровvalidation_split
Значение (0 ~ 1) определяет долю проверочного набора.
выполнить:
history = self.model.fit(
self.data[0], self.data[1],
epochs=self.config.num_epochs,
verbose=1,
batch_size=self.config.batch_size,
validation_split=0.33,
)
существуетfit()серединаруководствоРазделите набор проверки:
train_test_split
Источник sklearn.model_selection:
-
test_size
: доля набора валидации; -
random_state
: семя случайного числа;
по параметруvalidation_data
Добавьте данные проверки, форматданные + меткикортеж из .
выполнить:
X_train, X_test, y_train, y_test = \
train_test_split(self.data[0], self.data[1], test_size=0.33, random_state=47)
history = self.model.fit(
X_train, y_train,
validation_data=(X_test, y_test),
epochs=self.config.num_epochs,
batch_size=self.config.batch_size,
verbose=1,
)
Перекрестная проверка
К тяжелой перекрестной проверкой(К-кратная перекрестная проверка) — это обычная статистика оценки модели.
искусственный режим
функция перекрестной проверкиStratifiedKFold()
Из sklearn.model_selection:
-
n_splits
: количество кроссоверов, то есть N-кратная перекрестная проверка; -
shuffle
: Перемешиваются ли данные и метки случайным образом; -
random_state
: Начальное значение случайного числа; -
skf.split(X, y)
: Индекс, который разделяет данные и метки.
cvscores используется для подсчета результатов K-кратной перекрестной проверки и расчета среднего значения и дисперсии.
выполнить:
X = self.data[0] # 数据
y = self.data[1] # 标签
skf = StratifiedKFold(n_splits=10, shuffle=True, random_state=47)
cvscores = [] # 交叉验证结果
for train_index, test_index in skf.split(X, y): # 索引值
X_train, X_test = X[train_index], X[test_index]
y_train, y_test = y[train_index], y[test_index]
history = self.model.fit(
X_train, y_train,
epochs=self.config.num_epochs,
batch_size=self.config.batch_size,
verbose=0,
)
self.loss.extend(history.history['loss'])
self.acc.extend(history.history['acc'])
# scores的第一维是loss,第二维是acc
scores = self.model.evaluate(X_test, y_test)
print('[INFO] %s: %.2f%%' % (self.model.metrics_names[1], scores[1] * 100))
cvscores.append(scores[1] * 100)
cvscores = np.asarray(cvscores)
print('[INFO] %.2f%% (+/- %.2f%%)' % (np.mean(cvscores), np.std(cvscores)))
вывод:
[INFO] acc: 79.22%
[INFO] acc: 70.13%
[INFO] acc: 75.32%
[INFO] acc: 75.32%
[INFO] acc: 80.52%
[INFO] acc: 81.82%
[INFO] acc: 75.32%
[INFO] acc: 85.71%
[INFO] acc: 75.00%
[INFO] acc: 76.32%
[INFO] 77.47% (+/- 4.18%)
Режим обертки
пройти черезcross_val_score()
Модель ансамбля функций и логика перекрестной проверки.
- Инкапсулируйте модель как обертку, обратите внимание на использованиевстроенная функция,иНетвызов, без скобок
()
. -
epochs
то есть раунды,batch_size
количество партий; - StratifiedKFold — это логика K-кратной перекрестной проверки;
cross_val_score
Входными данными являются оболочка модели, данные X, метка Y, перекрестная проверка cv; выходными данными являются результаты каждой проверки, а затем вычисляются среднее значение и дисперсия.
выполнить:
X = self.data[0] # 数据
Y = self.data[1] # 标签
model_wrapper = KerasClassifier(
build_fn=create_model,
epochs=self.config.num_epochs,
batch_size=self.config.batch_size,
verbose=0
) # keras wrapper
kfold = StratifiedKFold(n_splits=10, shuffle=True, random_state=47)
results = cross_val_score(model_wrapper, X, Y, cv=kfold)
print('[INFO] %.2f%% (+/- %.2f%%)' % (np.mean(results) * 100.0, np.std(results) * 100.0))
вывод:
[INFO] 74.74% (+/- 4.37%)
Проверка поиска по сетке
Проверка поиска по сетке(Grid Search Cross-Validation) используется для выбора оптимальных значений гиперпараметров для модели.
функция перекрестной проверкиGridSearchCV()
Из sklearn.model_selection:
- Установите список гиперпараметров, таких как оптимизаторы,
init_modes
, эпохи, партии; - Создайте словарь параметров, значением ключа является параметр модели или параметр обертки;
- оценщик является моделью,
param_grid
словарь параметров сетки,n_jobs
количество процессов; - Выведите оптимальный результат и другие результаты перестановок и комбинаций.
выполнить:
X = self.data[0] # 数据
Y = self.data[1] # 标签
model_wrapper = KerasClassifier(
build_fn=create_model,
verbose=0
) # 模型
optimizers = ['rmsprop', 'adam'] # 优化器
init_modes = ['glorot_uniform', 'normal', 'uniform'] # 初始化模式
epochs = np.array([50, 100, 150]) # Epoch数
batches = np.array([5, 10, 20]) # 批次数
# 网格字典optimizer和init_mode是模型的参数,epochs和batch_size是wrapper的参数
param_grid = dict(optimizer=optimizers, epochs=epochs, batch_size=batches, init_mode=init_modes)
grid = GridSearchCV(estimator=model_wrapper, param_grid=param_grid, n_jobs=4)
grid_result = grid.fit(X, Y)
print('[INFO] Best: %f using %s' % (grid_result.best_score_, grid_result.best_params_))
for params, mean_score, scores in grid_result.grid_scores_:
print('[INFO] %f (%f) with %r' % (scores.mean(), scores.std(), params))
вывод:
[INFO] Best: 0.721354 using {'epochs': 100, 'init_mode': 'uniform', 'optimizer': 'adam', 'batch_size': 20}
[INFO] 0.697917 (0.025976) with {'epochs': 50, 'init_mode': 'normal', 'optimizer': 'rmsprop', 'batch_size': 10}
[INFO] 0.700521 (0.006639) with {'epochs': 50, 'init_mode': 'normal', 'optimizer': 'adam', 'batch_size': 10}
[INFO] 0.697917 (0.018414) with {'epochs': 50, 'init_mode': 'uniform', 'optimizer': 'rmsprop', 'batch_size': 10}
[INFO] 0.701823 (0.030314) with {'epochs': 50, 'init_mode': 'uniform', 'optimizer': 'adam', 'batch_size': 10}
[INFO] 0.632813 (0.059069) with {'epochs': 100, 'init_mode': 'normal', 'optimizer': 'rmsprop', 'batch_size': 10}
...
Добро пожаловать в Следуй за мнойGitHub: https://GitHub.com/шип Кинг
By C. L. Wang
OK, that's all! Enjoy it!