Import Geant4 11.1.0.beta source tree
This commit is contained in:
@@ -0,0 +1,87 @@
|
||||
"""
|
||||
** train **
|
||||
- defines data loading parameters and calls the data preprocessing function
|
||||
- defines the model parameters and instantiates the VAE model
|
||||
- performs the training
|
||||
"""
|
||||
|
||||
# 1. Data loading/preprocessing
|
||||
from utils import *
|
||||
# Directory where the HDF5 files are saved
|
||||
init_dir = './detector_'
|
||||
# Number of calorimeter layers
|
||||
nCells_z = 45
|
||||
# Segmentation in the r,phi direction
|
||||
nCells_r = 18
|
||||
nCells_phi = 50
|
||||
# Total number of readout cells (represents the number of nodes in the input/output layers of the model)
|
||||
original_dim = nCells_z*nCells_r*nCells_phi
|
||||
# Minimum and maximum primary particle energy to consider for training in GeV units
|
||||
min_energy = 1
|
||||
max_energy = 1024
|
||||
# Minimum and maximum primary particle angle to consider for training in degrees units
|
||||
min_angle = 50
|
||||
max_angle = 90
|
||||
# The preprocess function reads the data and performs preprocessing and encoding for the values of energy, angle and geometry
|
||||
energies_Train,condE_Train,condAngle_Train,condGeo_Train = preprocess(init_dir,original_dim,min_angle,max_angle,min_energy,max_energy)
|
||||
|
||||
# 2. Model architecture
|
||||
import model
|
||||
# Instantiate a VAE model and define all the parameters
|
||||
vae = model.VAE(batch_size=100 ,
|
||||
original_dim=original_dim,
|
||||
intermediate_dim1=100,
|
||||
intermediate_dim2=50,
|
||||
intermediate_dim3=20,
|
||||
intermediate_dim4=10+4,
|
||||
latent_dim=10,
|
||||
epsilon_std=1.,
|
||||
mu=0,
|
||||
epochs=10000,
|
||||
lr=0.001,
|
||||
activ=tf.keras.layers.LeakyReLU(),
|
||||
outActiv='sigmoid',
|
||||
validation_split=0.05,
|
||||
wReco=original_dim,
|
||||
wkl=0.5,
|
||||
optimizer=optimizers.Adam(),
|
||||
ki='RandomNormal',
|
||||
bi='Zeros',
|
||||
earlyStop=False,
|
||||
checkpoint_dir = "."
|
||||
)
|
||||
|
||||
# 3. Model training
|
||||
history = vae.train(energies_Train,
|
||||
condE_Train,
|
||||
condAngle_Train,
|
||||
condGeo_Train
|
||||
)
|
||||
|
||||
# 4. Save the model (ony the decoder part) after traing
|
||||
self.vae.decoder.save("decoder.h5")
|
||||
|
||||
# 5. Convert the model to ONNX format
|
||||
import keras2onnx
|
||||
import tensorflow
|
||||
# Create the Keras model and convert itinto an ONNX model
|
||||
kerasModel = tensorflow.keras.models.load_model("decoder.h5")
|
||||
onnxModel = keras2onnx.convert_keras(kerasModel,"name")
|
||||
# Save the ONNX model. Generator.onnx can then be used to perform the inference in the example
|
||||
keras2onnx.save_model(onnxModel,"Generator.onnx")
|
||||
|
||||
"""
|
||||
# In order to convert the model into a format that can be used with the LWTNN library
|
||||
# 1. After training :
|
||||
# serialize model to JSON
|
||||
json_model = self.vae.decoder.to_json()
|
||||
with open("decoder.json", "w") as json_file:
|
||||
json_file.write(json_model)
|
||||
# serialize weights to HDF5
|
||||
self.vae.decoder.save_weights("decoder.h5")
|
||||
# 2. Externally, after building the LWTNN code available at https://github.com/lwtnn/lwtnn
|
||||
# 2.1 Run the kerasfunc2json python script (available in lwtnn/ converters/) to generate a template file of your functional model input variables by calling:
|
||||
# $ kerasfunc2json.py decoder.json decoder.h5 > inputs.json
|
||||
# 2.2 Run again kerasfunc2json script to get your output file that would be used for the inference in the example
|
||||
# $ kerasfunc2json.py decoder.json decoder.h5 inputs.json > Generator.json
|
||||
"""
|
||||
Reference in New Issue
Block a user