-
Notifications
You must be signed in to change notification settings - Fork 1
/
run-2D-CNN.sh
148 lines (127 loc) · 5.77 KB
/
run-2D-CNN.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
#!/bin/bash
echo "
#####################################################################
# GLOW version 1.0 #
# GLOW - GaMD, Deep Learning, Free Energy Profiling Workflow #
# Authors: Hung Do, Jinan Wang, Apurba Bhattarai, Yinglong Miao #
# Update in 10/2021 #
#===================================================================#
If you use any parts of GLOW, please cite: #
Do, H., Wang, J., Bhattarai, A., and Miao, Y. (2021). GLOW - a #
Workflow Integrating Gaussian accelerated Molecular Dynamics #
and Deep Learning for Free Energy Profiling. #
#####################################################################"
echo "
=====================================================================
IMPORTANT NOTES FOR USERS:
The input file must be named: GLOW.in
In GLOW.in, please keep the format of the variables as follows,
in case you have more systems, i.e.
- workfolder_1, workfolder_2, workfolder_3, ...
- parm_sys_1, parm_sys_2, parm_sys_3, ...
- nb_prot_1, nb_prot_2, nb_prot_3, ...
- ...
Please use CTRL + A & CTRL + D to log off your terminal!
If you run into any issues, please contact [email protected]
====================================================================="
parfolder=`pwd`
source $parfolder/GLOW.in
cd $parfolder
echo "Current Directory: $parfolder"
nb_systems=$nb_systems
echo "Number of systems: $nb_systems"
echo "
#####################################################################
# (II) Deep Learning of the Residue Contact Maps #
#####################################################################"
echo "Your residue contact maps will be deposited at $dl_dir"
echo "
=====================================================================
# Part 2.2: 2D Convolutional Neural Network Model #
====================================================================="
export LD_LIBRARY_CONFIG=${cuDNN_lib}
mkdir -p $dl_dir/../metrics
rm $dl_dir/../conv-net.py $dl_dir/../model-summary.dat
echo "#!/bin/python3
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D
from tensorflow.keras.layers import BatchNormalization, Activation, Dropout, Flatten, Dense
from tensorflow.keras import optimizers
from tensorflow.keras import backend as K
from tensorflow.keras.callbacks import EarlyStopping
import pickle
train_data_dir = '$dl_dir/Train/'
valid_data_dir = '$dl_dir/Valid/'
img_width, img_height = $nb_residues, $nb_residues
nb_classes = $nb_systems
nb_epochs = 15
batch_size = 64
model_name = '$dl_dir/../model'
model_metrics = '$dl_dir/../metrics/' + 'metrics.pkl'
def conv_net(train_data_dir, valid_data_dir, img_width, img_height,
nb_classes, nb_epochs, batch_size,
model_name, model_metrics):
color_mode = 'grayscale'
if K.image_data_format() == 'channels_first':
input_shape = (1, img_width, img_height)
else:
input_shape = (img_width, img_height, 1)
class_mode='categorical'
model = Sequential()
model.add(Conv2D(32, (3, 3), padding='same', input_shape=input_shape,
name='conv1'))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(32, (3, 3), padding='same', name='conv2'))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(64, (3, 3), padding='same', name='conv3'))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(64, (3, 3), padding='same', name='conv4'))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(512, name='FC1'))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(128, name='FC2'))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(nb_classes, activation='softmax',
name='output'))
opt = optimizers.Adam(learning_rate=3e-4)
model.compile(loss='categorical_crossentropy', optimizer=opt,
metrics=['accuracy'])
model.summary()
train_datagen = ImageDataGenerator(rescale=1. /255, shear_range=0.3,
zoom_range=0.3, width_shift_range=0.3, height_shift_range=0.3,
rotation_range=30, horizontal_flip=True)
train_generator = train_datagen.flow_from_directory(train_data_dir,
shuffle=True, target_size=(img_width, img_height),
batch_size = batch_size, color_mode=color_mode, class_mode=class_mode)
valid_datagen = ImageDataGenerator(rescale=1. /255)
valid_generator = valid_datagen.flow_from_directory(valid_data_dir,
shuffle=True, target_size=(img_width, img_height),
batch_size = batch_size, color_mode=color_mode, class_mode=class_mode)
es = EarlyStopping(monitor='val_loss', mode='min', patience=5)
history = model.fit(train_generator, epochs = nb_epochs,
batch_size = batch_size,
validation_data = valid_generator,
callbacks=[es])
model.save(model_name)
metrics = open(model_metrics, 'wb')
pickle.dump(history.history, metrics)
metrics.close()
if __name__ == '__main__':
conv_net(train_data_dir, valid_data_dir, img_width, img_height,
nb_classes, nb_epochs, batch_size,
model_name, model_metrics)" >> $dl_dir/../conv-net.py
echo "The 2D Convolutional Neural Network Model is running!"
python $dl_dir/../conv-net.py >> $dl_dir/../model-summary.dat
if [ $? != 0 ]; then
echo "Errors with DL of image-transformed residue contact maps!"
exit 0
fi
echo "The 2D Convolutional Neural Network Model is done!"