Есть ли способ прекратить тренировки в середине эпохи с тензорным потоком? - PullRequest
3 голосов
/ 14 января 2020

Просто интересно, есть ли способ сохранить наивысшую точность и наименьшие потери в середине эпохи и использовать ее в качестве счета для продвижения вперед на следующую эпоху. Обычно мои данные доведены до максимума с точностью 43,56%, но я видел их go вплоть до 46% в середине эпохи. Есть ли способ, которым я могу остановить эпоху в этой точке и использовать ее для того, чтобы счет побил движение вперед?

Вот код, который я запускаю сейчас

import pandas as pd
import numpy as np
import pickle
import random
from skopt import BayesSearchCV
from sklearn.neural_network import MLPRegressor
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout, LSTM, Bidirectional, SimpleRNN, GRU
from tensorflow.keras.wrappers.scikit_learn import KerasRegressor
from tensorflow.keras import layers
import tensorflow_docs as tfdocs
import tensorflow as tf
from tensorflow.keras.callbacks import EarlyStopping, ModelCheckpoint
import tensorflow_docs.modeling
from tensorflow import keras
import warnings
warnings.filterwarnings("ignore")
warnings.filterwarnings('ignore', category=DeprecationWarning)

train_df = avenues[["LFA's", "Spend"]].sample(frac=0.8,random_state=0)
test_df = avenues[["LFA's", "Spend"]].drop(train_df.index)
train_df = clean_dataset(train_df)
test_df = clean_dataset(test_df)
train_df = train_df.reset_index(drop=True)
test_df = test_df.reset_index(drop=True)
train_stats = train_df.describe()
train_stats = train_stats.pop("LFA's")
train_stats = train_stats.transpose()
train_labels = train_df.pop("LFA's").values
test_labels = test_df.pop("LFA's").values
normed_train_data = np.array(norm(train_df)).reshape((train_df.shape[0], 1, 1))
normed_test_data = np.array(norm(test_df)).reshape((test_df.shape[0], 1, 1))
model = KerasRegressor(build_fn=build_model, epochs=25, 
                                   batch_size=1, verbose=0)
gs = BayesSearchCV(model, param_grid, cv=3, n_iter=25, n_jobs=1,
                               optimizer_kwargs={'base_estimator': 'RF'},
                               fit_params={"callbacks": [es_acc, es_loss, tfdocs.modeling.EpochDots()]})
try:
     gs.fit(normed_train_data, train_labels)
except Exception as e:
     print(e)

1 Ответ

1 голос
/ 14 января 2020

Попробуйте использовать train_on_batch вместо fit. Таким образом, вы можете контролировать внутри своей эпохи, чтобы останавливаться после каждой партии, которую вы хотите (хотя с точки зрения машинного обучения, у меня есть сомнения, если это хорошая идея, и вы получите менее обобщенную модель в конце ).

...