Skip to content

Commit f5ece95

Browse files
committed
renamed to have _keras2 for CANDLE
1 parent 2e5436f commit f5ece95

File tree

2 files changed

+173
-0
lines changed

2 files changed

+173
-0
lines changed
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
# Setup
2+
3+
import os
4+
import sys
5+
# import gzip
6+
7+
# import math
8+
# import matplotlib
9+
# matplotlib.use('Agg')
10+
11+
# import matplotlib.pyplot as plt
12+
13+
from tensorflow.keras import backend as K
14+
from tensorflow.keras.optimizers import Adam # RMSprop, SGD
15+
from tensorflow.keras.callbacks import ModelCheckpoint, CSVLogger, ReduceLROnPlateau, EarlyStopping
16+
17+
file_path = os.path.dirname(os.path.realpath(__file__))
18+
lib_path = os.path.abspath(os.path.join(file_path, '..', '..', 'common'))
19+
sys.path.append(lib_path)
20+
21+
import candle
22+
import smiles_transformer as st
23+
24+
25+
def initialize_parameters(default_model='class_default_model.txt'):
26+
27+
# Build benchmark object
28+
sctBmk = st.BenchmarkST(st.file_path, default_model, 'keras',
29+
prog='p1b1_baseline',
30+
desc='Multi-task (DNN) for data extraction from clinical reports - Pilot 3 Benchmark 1')
31+
32+
# Initialize parameters
33+
gParameters = candle.finalize_parameters(sctBmk)
34+
35+
return gParameters
36+
37+
38+
# Train and Evaluate
39+
40+
def run(params):
41+
42+
x_train, y_train, x_val, y_val = st.load_data(params)
43+
44+
model = st.transformer_model(params)
45+
46+
model.compile(loss='sparse_categorical_crossentropy',
47+
optimizer=Adam(lr=0.000001),
48+
metrics=['accuracy'])
49+
50+
# set up a bunch of callbacks to do work during model training..
51+
52+
checkpointer = ModelCheckpoint(filepath='smile_class.autosave.model.h5', verbose=1, save_weights_only=True, save_best_only=True)
53+
csv_logger = CSVLogger('smile_class.training.log')
54+
reduce_lr = ReduceLROnPlateau(monitor='val_loss', factor=0.75, patience=20, verbose=1, mode='auto', epsilon=0.0001, cooldown=3, min_lr=0.000000001)
55+
early_stop = EarlyStopping(monitor='val_loss', patience=100, verbose=1, mode='auto')
56+
57+
history = model.fit(x_train, y_train,
58+
batch_size=params['batch_size'],
59+
epochs=params['epochs'],
60+
verbose=1,
61+
validation_data=(x_val, y_val),
62+
callbacks=[checkpointer, csv_logger, reduce_lr, early_stop])
63+
64+
model.load_weights('smile_class.autosave.model.h5')
65+
66+
67+
def main():
68+
params = initialize_parameters()
69+
run(params)
70+
71+
72+
if __name__ == '__main__':
73+
main()
74+
if K.backend() == 'tensorflow':
75+
K.clear_session()
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
# Setup
2+
3+
import os
4+
import sys
5+
# import gzip
6+
7+
# import math
8+
# import matplotlib
9+
# matplotlib.use('Agg')
10+
11+
# import matplotlib.pyplot as plt
12+
13+
from tensorflow.keras import backend as K
14+
import tensorflow.keras.optimizers as optimizers
15+
from tensorflow.keras.callbacks import ModelCheckpoint, CSVLogger, ReduceLROnPlateau, EarlyStopping
16+
17+
file_path = os.path.dirname(os.path.realpath(__file__))
18+
lib_path = os.path.abspath(os.path.join(file_path, '..', '..', 'common'))
19+
sys.path.append(lib_path)
20+
21+
import candle
22+
import smiles_transformer as st
23+
24+
import tensorflow.config.experimental
25+
gpus = tensorflow.config.experimental.list_physical_devices('GPU')
26+
try:
27+
for gpu in gpus:
28+
print("setting memory growth")
29+
tensorflow.config.experimental.set_memory_growth(gpu, True)
30+
except RuntimeError as e:
31+
print(e)
32+
33+
34+
def initialize_parameters(default_model='regress_default_model.txt'):
35+
36+
# Build benchmark object
37+
sctBmk = st.BenchmarkST(st.file_path, default_model, 'keras',
38+
prog='p1b1_baseline',
39+
desc='Multi-task (DNN) for data extraction from clinical reports - Pilot 3 Benchmark 1')
40+
41+
# Initialize parameters
42+
gParameters = candle.finalize_parameters(sctBmk)
43+
44+
return gParameters
45+
46+
47+
# Train and Evaluate
48+
49+
def run(params):
50+
51+
x_train, y_train, x_val, y_val = st.load_data(params)
52+
53+
model = st.transformer_model(params)
54+
55+
optimizer = optimizers.deserialize({'class_name': params['optimizer'], 'config': {}})
56+
57+
# I don't know why we set base_lr. It doesn't appear to be used.
58+
if 'base_lr' in params and params['base_lr'] > 0:
59+
base_lr = params['base_lr']
60+
else:
61+
base_lr = K.get_value(optimizer.lr)
62+
63+
if 'learning_rate' in params and params['learning_rate'] > 0:
64+
K.set_value(optimizer.lr, params['learning_rate'])
65+
print('Done setting optimizer {} learning rate to {}'.format(
66+
params['optimizer'],params['learning_rate']))
67+
68+
model.compile(loss='mean_squared_error',
69+
optimizer=optimizer,
70+
metrics=['mae', st.r2])
71+
72+
# set up a bunch of callbacks to do work during model training..
73+
74+
checkpointer = ModelCheckpoint(filepath='smile_regress.autosave.model.h5', verbose=1, save_weights_only=True, save_best_only=True)
75+
csv_logger = CSVLogger('smile_regress.training.log')
76+
reduce_lr = ReduceLROnPlateau(monitor='val_loss', factor=0.75, patience=20, verbose=1, mode='auto', epsilon=0.0001, cooldown=3, min_lr=0.000000001)
77+
early_stop = EarlyStopping(monitor='val_loss', patience=100, verbose=1, mode='auto')
78+
79+
history = model.fit(x_train, y_train,
80+
batch_size=params['batch_size'],
81+
epochs=params['epochs'],
82+
verbose=1,
83+
validation_data=(x_val, y_val),
84+
callbacks=[checkpointer, csv_logger, reduce_lr, early_stop])
85+
86+
model.load_weights('smile_regress.autosave.model.h5')
87+
88+
return history
89+
90+
def main():
91+
params = initialize_parameters()
92+
run(params)
93+
94+
95+
if __name__ == '__main__':
96+
main()
97+
if K.backend() == 'tensorflow':
98+
K.clear_session()

0 commit comments

Comments
 (0)