Skip to content
Snippets Groups Projects
Commit 182551af authored by Tim O'Donnell's avatar Tim O'Donnell
Browse files

fix

parent adf2c56a
No related branches found
No related tags found
No related merge requests found
...@@ -569,6 +569,12 @@ class Class1NeuralNetwork(object): ...@@ -569,6 +569,12 @@ class Class1NeuralNetwork(object):
verbose=verbose) verbose=verbose)
iterator = itertools.chain([first_chunk], iterator) iterator = itertools.chain([first_chunk], iterator)
def progress_update(epoch, logs):
if verbose:
print(
"Cumulative training points:",
mutable_generator_state['yielded_values'])
fit_history = network.fit_generator( fit_history = network.fit_generator(
iterator, iterator,
steps_per_epoch=steps_per_epoch, steps_per_epoch=steps_per_epoch,
...@@ -577,11 +583,14 @@ class Class1NeuralNetwork(object): ...@@ -577,11 +583,14 @@ class Class1NeuralNetwork(object):
workers=1, workers=1,
validation_data=(validation_x_dict, validation_y_dict), validation_data=(validation_x_dict, validation_y_dict),
verbose=verbose, verbose=verbose,
callbacks=[keras.callbacks.EarlyStopping( callbacks=[
monitor="val_loss", keras.callbacks.EarlyStopping(
patience=patience, monitor="val_loss",
min_delta=min_delta, patience=patience,
verbose=verbose)] min_delta=min_delta,
verbose=verbose),
keras.callbacks.LambdaCallback(on_epoch_end=progress_update),
]
) )
for (key, value) in fit_history.history.items(): for (key, value) in fit_history.history.items():
fit_info[key].extend(value) fit_info[key].extend(value)
......
...@@ -35,7 +35,7 @@ import numpy ...@@ -35,7 +35,7 @@ import numpy
def svd_orthonormal(shape): def svd_orthonormal(shape):
# Orthonorm init code is from Lasagne # Orthonormal init code is from Lasagne
# https://github.com/Lasagne/Lasagne/blob/master/lasagne/init.py # https://github.com/Lasagne/Lasagne/blob/master/lasagne/init.py
if len(shape) < 2: if len(shape) < 2:
raise RuntimeError("Only shapes of length 2 or more are supported.") raise RuntimeError("Only shapes of length 2 or more are supported.")
......
...@@ -475,17 +475,32 @@ def train_model( ...@@ -475,17 +475,32 @@ def train_model(
print("%s [pid %d]. Hyperparameters:" % (progress_preamble, os.getpid())) print("%s [pid %d]. Hyperparameters:" % (progress_preamble, os.getpid()))
pprint.pprint(hyperparameters) pprint.pprint(hyperparameters)
if hyperparameters.get("train_data", {}).get("pretrain", False): train_params = dict(hyperparameters.get("train_data", {}))
pretrain_patience = hyperparameters["train_data"].get(
"pretrain_patience", 10) def get_train_param(param, default):
pretrain_min_delta = hyperparameters["train_data"].get( if param in train_params:
"pretrain_min_delta", 0.0) result = train_params.pop(param)
pretrain_steps_per_epoch = hyperparameters["train_data"].get( if verbose:
print("Train param", param, "=", result)
else:
result = default
if verbose:
print("Train param", param, "=", result, "[default]")
return result
if get_train_param("pretrain", False):
pretrain_patience = get_train_param("pretrain_patience", 10)
pretrain_min_delta = get_train_param("pretrain_min_delta", 0.0)
pretrain_steps_per_epoch = get_train_param(
"pretrain_steps_per_epoch", 10) "pretrain_steps_per_epoch", 10)
pretrain_max_epochs = hyperparameters["train_data"].get( pretrain_max_epochs = get_train_param(
"pretrain_max_epochs", 1000) "pretrain_max_epochs", 1000)
pretrain_peptides_per_step = get_train_param(
"pretrain_peptides_per_step", 1024)
max_val_loss = get_train_param("pretrain_max_val_loss", None)
max_val_loss = hyperparameters["train_data"].get("pretrain_max_val_loss") if verbose:
print("Unused train params", train_params)
attempt = 0 attempt = 0
while True: while True:
...@@ -498,7 +513,10 @@ def train_model( ...@@ -498,7 +513,10 @@ def train_model(
model = Class1NeuralNetwork(**hyperparameters) model = Class1NeuralNetwork(**hyperparameters)
assert model.network() is None assert model.network() is None
generator = pretrain_data_iterator( generator = pretrain_data_iterator(
pretrain_data_filename, allele_encoding) pretrain_data_filename,
allele_encoding,
peptides_per_chunk=pretrain_peptides_per_step)
model.fit_generator( model.fit_generator(
generator, generator,
validation_peptide_encoding=train_peptides, validation_peptide_encoding=train_peptides,
......
...@@ -33,7 +33,7 @@ FOLDS_DF["fold_0"] = True ...@@ -33,7 +33,7 @@ FOLDS_DF["fold_0"] = True
HYPERPARAMTERS = { HYPERPARAMTERS = {
'activation': 'tanh', 'allele_dense_layer_sizes': [], 'activation': 'tanh', 'allele_dense_layer_sizes': [],
'batch_normalization': False, 'batch_normalization': False,
'dense_layer_l1_regularization': 9.999999999999999e-11, 'dense_layer_l1_regularization': 0.0,
'dense_layer_l2_regularization': 0.0, 'dropout_probability': 0.5, 'dense_layer_l2_regularization': 0.0, 'dropout_probability': 0.5,
'early_stopping': True, 'init': 'glorot_uniform', 'early_stopping': True, 'init': 'glorot_uniform',
'layer_sizes': [1024, 512], 'learning_rate': None, 'layer_sizes': [1024, 512], 'learning_rate': None,
...@@ -50,9 +50,10 @@ HYPERPARAMTERS = { ...@@ -50,9 +50,10 @@ HYPERPARAMTERS = {
'random_negative_distribution_smoothing': 0.0, 'random_negative_distribution_smoothing': 0.0,
'random_negative_match_distribution': True, 'random_negative_rate': 0.2, 'random_negative_match_distribution': True, 'random_negative_rate': 0.2,
'train_data': {'pretrain': True, 'train_data': {'pretrain': True,
'pretrain_max_epochs': 3, 'pretrain_max_epochs': 30,
'pretrain_peptides_per_epoch': 1024, 'pretrain_patience': 5,
'pretrain_steps_per_epoch': 16}, 'pretrain_peptides_per_step': 32,
'pretrain_steps_per_epoch': 256},
'validation_split': 0.1, 'validation_split': 0.1,
'data_dependent_initialization_method': "lsuv", 'data_dependent_initialization_method': "lsuv",
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment