Skip to content

Commit

Permalink
More hyperas testing
Browse files Browse the repository at this point in the history
  • Loading branch information
jacobbieker committed Nov 19, 2018
1 parent dbb7cef commit d38b720
Show file tree
Hide file tree
Showing 5 changed files with 132 additions and 56 deletions.
104 changes: 89 additions & 15 deletions examples/cpu_flow_sep.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,101 @@
from factnn import GammaPreprocessor, ProtonPreprocessor
from factnn.generator.keras.eventfile_generator import EventFileGenerator
from factnn.data.preprocess.eventfile_preprocessor import EventFilePreprocessor
from factnn.generator.generator.separation_generators import SeparationGenerator
import os.path
from factnn.utils import kfold
from keras.models import load_model

base_dir = "../ihp-pc41.ethz.ch/public/phs/"
obs_dir = [base_dir + "public/"]
gamma_dir = [base_dir + "sim/gamma/"]
proton_dir = [base_dir + "sim/proton/"]

shape = [30,80]
rebin_size = 5

# Get paths from the directories
gamma_paths = []
for directory in gamma_dir:
for root, dirs, files in os.walk(directory):
for file in files:
if file.endswith("phs.jsonl.gz"):
gamma_paths.append(os.path.join(root, file))


# Get paths from the directories
proton_paths = []
for directory in proton_dir:
for root, dirs, files in os.walk(directory):
for file in files:
if file.endswith("phs.jsonl.gz"):
proton_paths.append(os.path.join(root, file))


# Now do the Kfold Cross validation Part for both sets of paths
gamma_indexes = kfold.split_data(gamma_paths, kfolds=5)
proton_indexes = kfold.split_data(proton_paths, kfolds=5)


gamma_configuration = {
'rebin_size': rebin_size,
'output_file': "../gamma.hdf5",
'shape': shape,
'paths': gamma_indexes[0][0],
'as_channels': True
}

proton_configuration = {
'rebin_size': rebin_size,
'output_file': "../proton.hdf5",
'shape': shape,
'paths': proton_indexes[0][0],
'as_channels': True
}


proton_train_preprocessor = ProtonPreprocessor(config=proton_configuration)
gamma_train_preprocessor = GammaPreprocessor(config=gamma_configuration)

gamma_configuration['paths'] = gamma_indexes[1][0]
proton_configuration['paths'] = proton_indexes[1][0]

proton_validate_preprocessor = ProtonPreprocessor(config=proton_configuration)
gamma_validate_preprocessor = GammaPreprocessor(config=gamma_configuration)


separation_generator_configuration = {
'seed': 1337,
'batch_size': 16,
'start_slice': 0,
'number_slices': shape[1] - shape[0],
'mode': 'train',
'chunked': False,
'augment': True,
'from_directory': True,
'input_shape': [-1, gamma_train_preprocessor.shape[3], gamma_train_preprocessor.shape[2], gamma_train_preprocessor.shape[1], 1],
'as_channels': True,
}

separation_validate = SeparationGenerator(config=separation_generator_configuration)
separation_train = SeparationGenerator(config=separation_generator_configuration)

separation_validate.mode = "validate"
separation_train.mode = "train"

separation_train.proton_train_preprocessor = proton_train_preprocessor
separation_train.proton_validate_preprocessor = proton_validate_preprocessor
separation_train.train_preprocessor = gamma_train_preprocessor
separation_train.validate_preprocessor = gamma_validate_preprocessor


base_dir = "/home/jacob/Development/event_files/"
obs_dir = [base_dir + "public/"]
gamma_dir = [base_dir + "gamma/"]
proton_dir = [base_dir + "proton/"]

shape = [30, 80]
rebin_size = 10
rebin_size = 5

# Get paths from the directories
gamma_paths = []
Expand Down Expand Up @@ -51,8 +135,8 @@
'as_channels': True
}

proton_train_preprocessor = EventFilePreprocessor(config=proton_configuration)
gamma_train_preprocessor = EventFilePreprocessor(config=gamma_configuration)
proton_train_preprocessor = ProtonPreprocessor(config=proton_configuration)
gamma_train_preprocessor = GammaPreprocessor(config=gamma_configuration)

gamma_configuration['paths'] = gamma_indexes[1][0]
proton_configuration['paths'] = proton_indexes[1][0]
Expand All @@ -73,17 +157,6 @@
gamma_train_preprocessor.shape[1], 1],
'as_channels': True,
}

energy_train = EventFileGenerator(paths=gamma_indexes[0][0], batch_size=32,
preprocessor=gamma_train_preprocessor,
proton_paths=proton_indexes[0][0],
proton_preprocessor=proton_train_preprocessor,
as_channels=True,
final_slices=5,
slices=(30, 70),
augment=True,
training_type='Separation')

energy_validate = EventFileGenerator(paths=gamma_indexes[1][0], batch_size=32,
proton_paths=proton_indexes[1][0],
proton_preprocessor=proton_validate_preprocessor,
Expand Down Expand Up @@ -151,8 +224,9 @@
val_num = event_totals * 0.2

separation_model.fit_generator(
generator=energy_train,
generator=separation_train,
epochs=500,
steps_per_epoch=int(3600/16),
verbose=1,
validation_data=energy_validate,
callbacks=[early_stop, model_checkpoint, tensorboard],
Expand Down
24 changes: 11 additions & 13 deletions examples/cpu_flow_separation.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#import os
#os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID" # see issue #152
#os.environ["CUDA_VISIBLE_DEVICES"] = ""
import os
os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID" # see issue #152
os.environ["CUDA_VISIBLE_DEVICES"] = ""

from factnn import GammaPreprocessor, ProtonPreprocessor
from factnn.generator.keras.eventfile_generator import EventFileGenerator
Expand Down Expand Up @@ -61,15 +61,15 @@
final_slices=5,
slices=(30, 70),
augment=True,
training_type='Disp')
training_type='Separation')

energy_validate = EventFileGenerator(paths=gamma_indexes[1][0], batch_size=16,
preprocessor=gamma_validate_preprocessor,
as_channels=True,
final_slices=5,
slices=(30, 70),
augment=False,
training_type='Disp')
training_type='Separation')

from keras.layers import Dense, Dropout, Flatten, ConvLSTM2D, Conv3D, MaxPooling3D, Conv2D, MaxPooling2D, PReLU, ReLU, BatchNormalization
from keras.models import Sequential
Expand All @@ -84,7 +84,7 @@ def r2(y_true, y_pred):

import keras.losses
keras.losses.r2 = r2

"""
separation_model = Sequential()
#separation_model.add(ConvLSTM2D(32, kernel_size=3, strides=2,
Expand Down Expand Up @@ -207,13 +207,11 @@ def r2(y_true, y_pred):
val_num = event_totals * 0.2

separation_model.fit_generator(
generator=separation_train,
steps_per_epoch=int(np.floor(train_num / separation_train.batch_size)),
generator=energy_train,
steps_per_epoch=int(np.floor(train_num / energy_train.batch_size)),
epochs=500,
verbose=1,
validation_data=separation_validate,
validation_data=energy_validate,
callbacks=[early_stop, model_checkpoint, tensorboard],
validation_steps=int(np.floor(val_num / separation_validate.batch_size))
)
"""
validation_steps=int(np.floor(val_num / energy_validate.batch_size))
)
8 changes: 7 additions & 1 deletion examples/flow_from_files_separation.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,10 @@
from factnn import GammaPreprocessor, ProtonPreprocessor, SeparationGenerator, SeparationModel
import os

os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID" # see issue #152
os.environ["CUDA_VISIBLE_DEVICES"] = ""

from factnn import GammaPreprocessor, ProtonPreprocessor, SeparationModel
from factnn.generator.generator.separation_generators import SeparationGenerator
import os.path
from factnn.utils import kfold
from keras.models import load_model
Expand Down
50 changes: 25 additions & 25 deletions examples/hyperas_separation_time.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ def data():
gamma_dir = [base_dir + "gamma/"]
proton_dir = [base_dir + "proton/"]

shape = [35, 70]
shape = [30, 90]
rebin_size = 5

# Get paths from the directories
Expand Down Expand Up @@ -77,13 +77,13 @@ def data():
'as_channels': False,
}

energy_train = EventFileGenerator(paths=gamma_indexes[0][0], batch_size=5000,
energy_train = EventFileGenerator(paths=gamma_indexes[0][0], batch_size=7000,
preprocessor=gamma_train_preprocessor,
proton_paths=proton_indexes[0][0],
proton_preprocessor=proton_train_preprocessor,
as_channels=False,
final_slices=10,
slices=(30, 70),
final_slices=5,
slices=(30, 80),
augment=True,
training_type='Separation')

Expand All @@ -92,8 +92,8 @@ def data():
proton_preprocessor=proton_validate_preprocessor,
preprocessor=gamma_validate_preprocessor,
as_channels=False,
final_slices=10,
slices=(30, 70),
final_slices=5,
slices=(30, 80),
augment=False,
training_type='Separation')

Expand All @@ -114,72 +114,72 @@ def data():
from keras.models import Sequential

from hyperas import optim
from hyperas.distributions import choice, uniform, choice
from hyperas.distributions import randint, uniform, choice


def create_model(x_train, y_train, x_test, y_test):
separation_model = Sequential()

# separation_model.add(BatchNormalization())
separation_model.add(ConvLSTM2D({{choice([8,16, 32, 64])}}, kernel_size={{choice([1, 2, 3, 4, 5])}}, strides=1,
separation_model.add(ConvLSTM2D({{randint(64)}}, kernel_size={{choice([1, 3, 5])}}, strides=1,
padding='same',
batch_input_shape=[16,10,75,75,1],
input_shape=[5,75,75,1],
activation={{choice(['relu', 'tanh'])}},
dropout={{uniform(0,0.75)}}, recurrent_dropout={{uniform(0,0.75)}},
recurrent_activation={{choice(['relu', 'tanh', 'hard_sigmoid'])}},
return_sequences=True,
stateful=True))
stateful=False))
if {{choice(['pool', 'no_pool'])}} == 'pool':
separation_model.add(MaxPooling3D())
if {{choice(['lstm', 'conv'])}} == 'lstm':
separation_model.add(ConvLSTM2D({{choice([8,16, 32, 64])}}, kernel_size={{choice([1, 2, 3, 4, 5])}}, strides=1,
separation_model.add(ConvLSTM2D({{randint(64)}}, kernel_size={{choice([1, 3, 5])}}, strides=1,
padding='same',
activation={{choice(['relu', 'tanh'])}},
dropout={{uniform(0,0.75)}}, recurrent_dropout={{uniform(0,0.75)}},
recurrent_activation={{choice(['relu', 'tanh', 'hard_sigmoid'])}},
return_sequences=True,
stateful=True))
stateful=False))
if {{choice(['pool', 'no_pool'])}} == 'pool':
separation_model.add(MaxPooling3D())
else:
separation_model.add(
Conv3D({{choice([16, 32, 64])}},
kernel_size={{choice([1, 2, 3, 4, 5])}},
Conv3D({{randint(64)}},
kernel_size={{choice([1, 3, 5])}},
strides=1,
padding='same'))
separation_model.add(Activation({{choice(['relu', 'sigmoid'])}}))
separation_model.add(MaxPooling3D())
separation_model.add(Dropout({{uniform(0, 1)}}))

if {{choice(['lstm', 'conv'])}} == 'lstm':
separation_model.add(ConvLSTM2D({{choice([8,16, 32, 64])}}, kernel_size={{choice([1, 2, 3, 4, 5])}}, strides=1,
separation_model.add(ConvLSTM2D({{randint(64)}}, kernel_size={{choice([1, 3, 5])}}, strides=1,
padding='same',
activation={{choice(['relu', 'tanh'])}},
dropout={{uniform(0,0.75)}}, recurrent_dropout={{uniform(0,0.75)}},
recurrent_activation={{choice(['relu', 'tanh', 'hard_sigmoid'])}},
return_sequences=False,
stateful=True))
stateful=False))
if {{choice(['pool', 'no_pool'])}} == 'pool':
separation_model.add(MaxPooling3D())
else:
separation_model.add(
Conv3D({{choice([16, 32, 64])}},
kernel_size={{choice([1, 2, 3, 4, 5])}},
Conv3D({{randint(64)}},
kernel_size={{choice([1, 3, 5])}},
strides=1,
padding='same'))
separation_model.add(Activation({{choice(['relu', 'sigmoid'])}}))
separation_model.add(MaxPooling3D())
separation_model.add(Dropout({{uniform(0, 1)}}))

separation_model.add(Flatten())
separation_model.add(Dense({{choice([16, 32, 64])}}))
separation_model.add(Dense({{randint(64)}}))
separation_model.add(Activation({{choice(['relu', 'sigmoid'])}}))
separation_model.add(Dropout({{uniform(0, 1)}}))
separation_model.add(Dense({{choice([16, 32, 64, 128])}}))
separation_model.add(Dense({{randint(128)}}))
separation_model.add(Activation({{choice(['relu', 'sigmoid'])}}))
separation_model.add(Dropout({{uniform(0, 1)}}))
if {{choice(['three', 'four'])}} == 'four':
separation_model.add(Dense({{choice([16, 32, 64, 128])}}))
separation_model.add(Dense({{randint(128)}}))
separation_model.add(Activation({{choice(['relu', 'sigmoid'])}}))
separation_model.add(Dropout({{uniform(0, 1)}}))

Expand All @@ -188,12 +188,12 @@ def create_model(x_train, y_train, x_test, y_test):
separation_model.compile(optimizer={{choice(['rmsprop', 'adam', 'sgd'])}}, loss='categorical_crossentropy',
metrics=['acc'])

early_stop = keras.callbacks.EarlyStopping(monitor='val_loss', min_delta=0,
patience=5,
early_stop = keras.callbacks.EarlyStopping(monitor='val_loss', min_delta=0.0002,
patience=10,
verbose=0, mode='auto')

result = separation_model.fit(x_train, y_train,
batch_size=16,
batch_size=32,
epochs=200,
verbose=2,
validation_split=0.2,
Expand All @@ -208,7 +208,7 @@ def create_model(x_train, y_train, x_test, y_test):
best_run, best_model = optim.minimize(model=create_model,
data=data,
algo=tpe.suggest,
max_evals=20,
max_evals=5,
trials=Trials())
best_model.summary()
X_train, Y_train, X_test, Y_test = data()
Expand Down
2 changes: 0 additions & 2 deletions factnn/utils/augment.py
Original file line number Diff line number Diff line change
Expand Up @@ -412,9 +412,7 @@ def augment_image_batch(images, proton_images=None, type_training=None, augment=
training_data = [item[data_format["Image"]] for item in training_data]

training_data = np.array(training_data)
print(training_data.shape)
training_data = training_data.reshape(-1, training_data.shape[2], training_data.shape[3], training_data.shape[4])
print(training_data.shape)

if proton_images is not None:
proton_data = [item[0] for item in proton_images]
Expand Down

0 comments on commit d38b720

Please sign in to comment.