Skip to content

Commit 1a29925

Browse files
committed
Added the P1B2 benchmark.
1 parent 141c131 commit 1a29925

File tree

3 files changed

+309
-0
lines changed

3 files changed

+309
-0
lines changed

P2B1/__init__.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
print 'import candle'
2+
import os,sys
3+
HOME=os.environ['HOME']
4+
sys.path.append('%s/Work/Python/Git_Folder/caffe-tools/Newkeras/keras'%HOME)

P2B1/__main__.py

Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
import theano
2+
import numpy as np
3+
import scipy as sp
4+
import pickle
5+
import sys,os
6+
import glob
7+
import optparse
8+
HOME=os.environ['HOME']
9+
def parse_list(option, opt, value, parser):
10+
setattr(parser.values, option.dest, value.split(','))
11+
12+
if __name__=="__main__":
13+
### Hyperparameters and model save path
14+
parser=optparse.OptionParser()
15+
parser.add_option("--train", action="store_true",dest="train_bool",default=False,help="Invoke training")
16+
parser.add_option("--learning-rate",help="learning rate",dest="learning_rate",type=float,default=0.1)
17+
parser.add_option("--noise-factor",help="noise",dest="noise_factor",type=float,default=0.0)
18+
parser.add_option("--cool",action="store_true",dest="cool",default=False,help="Cool Learning Rate")
19+
parser.add_option("--epochs",help="epochs",dest="epochs",type=int,default=1)
20+
parser.add_option("--home-dir",help="Home Directory",dest="home_dir",type=str,default='/Users/talathi1/Work/Python/Git_Folder/caffe-tools/keras')
21+
parser.add_option("--save-dir",help="Save Directory",dest="save_path",type=str,default=None)
22+
parser.add_option("--model-file",help="Trained Model Pickle File",dest="weight_path",type=str,default=None)
23+
parser.add_option("--memo",help="Memo",dest="base_memo",type=str,default=None)
24+
(opts,args)=parser.parse_args()
25+
26+
## Example of training command:
27+
#python mnist_conv_autoencoder.py -C --save-dir /Users/talathi1/Work/Python/Models/Test_Models --memo test --epochs 1 --data-path /Users/talathi1/Work/DataSets/mnist.pkl.gz --learning-rate 0.01 --train --classify --unpool_type 3
28+
29+
if not os.path.isdir(opts.home_dir):
30+
print ('Keras home directory not set')
31+
sys.exit(0)
32+
sys.path.append('home_dir')
33+
34+
import candle.candle_helper_functions as hf
35+
reload(hf)
36+
maps=hf.autoencoder_preprocess()
37+
#from keras.Helpermodules.mnist_autoencoder_helper_functions import mnist_conv_deconv_simple, mnist_conv_deconv_complex,mnist_autoencoder_preprocess,generate_figure
38+
39+
from keras.optimizers import SGD,RMSprop
40+
from keras.datasets import mnist
41+
from keras.callbacks import LearningRateScheduler,ModelCheckpoint
42+
from keras.regularizers import l2,WeightRegularizer
43+
from keras import callbacks
44+
from keras.layers.advanced_activations import ELU
45+
from keras.preprocessing.image import ImageDataGenerator
46+
47+
batch_size = 16
48+
##### Read Data ########
49+
print ('Reading Data...')
50+
data_file='%s/Work/DataSets/CANDLE/sim-numpy.npy'%HOME ### can code to read at the terminal
51+
print 'Data File: %s' %data_file
52+
print 'Data Format: [Num Samples, Num Molecules, Num Atoms, Position]'
53+
54+
X=np.load(data_file) ### Data is: Samples, Molecules, Atoms, x-pos,y-pos,z-pos
55+
## Take center of mass for atoms:
56+
X_A=X.mean(axis=2) ## Data is: Samples, Molecules, x-pos,y-pos,z-pos
57+
#X_train=X_A.reshape(X_A.shape[0],X_A.shape[1]*X_A.shape[2])
58+
X_train=X_A[:,:,2] ## only consider z-dimension
59+
y_train=X_train.copy()
60+
input_dim=X_train.shape[1]
61+
mu, sigma = np.mean(X_train), np.std(X_train)
62+
mu=0.0;sigma=1.0
63+
X_train=maps.renormalize(X_train,mu,sigma)
64+
datagen=hf.ImageNoiseDataGenerator(corruption_level=opts.noise_factor) ## Add some corruption to input data ## idead for denoising auto encoder
65+
66+
print('X_train type and shape:', X_train.dtype, X_train.shape)
67+
print('X_train.min():', X_train.min())
68+
print('X_train.max():', X_train.max())
69+
70+
### Define Model, Solver and Compile ##########
71+
print ('Define the model and compile')
72+
opt = SGD(lr=opts.learning_rate, decay=0.0, momentum=0.975, nesterov=True)
73+
74+
print ('using mlp network')
75+
model_type='mlp'
76+
hidden_layers=[512,256,128,64,32,16]
77+
model=hf.dense_auto(weights_path=opts.weight_path,input_shape=(input_dim,),nonlinearity='elu',hidden_layers=hidden_layers)
78+
79+
memo='%s_%s_%0.5f'%(opts.base_memo,model_type,opts.learning_rate)
80+
81+
print 'Autoencoder Regression problem'
82+
model.compile(optimizer='adadelta', loss='mean_squared_error')
83+
84+
#### Print Model Configuration ###########
85+
num_layers=len(model.layers)
86+
print '*'*10,'Model Configuration','*'*10
87+
for i in range(len(model.layers)):
88+
print i,': ',model.layers[i].name, ':', model.layers[i].output_shape[:]
89+
90+
### Set up for Training and Validation
91+
total_epochs = opts.epochs
92+
initial_lrate=opts.learning_rate
93+
if opts.cool:
94+
drop=0.5
95+
else:
96+
drop=1.0
97+
98+
epochs_drop=1+int(np.floor(total_epochs/3))
99+
100+
def step_decay(epoch):
101+
global initial_lrate,epochs_drop,drop
102+
lrate = initial_lrate * np.power(drop, np.floor((1+epoch)/epochs_drop))
103+
return lrate
104+
lr_scheduler = LearningRateScheduler(step_decay)
105+
106+
#### Train the Model
107+
if opts.train_bool:
108+
history = callbacks.History()
109+
if opts.save_path !=None:
110+
model_file='%s/%s.hdf5'%(opts.save_path,memo)
111+
checkpointer=ModelCheckpoint(filepath=model_file, verbose=1)
112+
callbacks=[history,lr_scheduler,checkpointer]
113+
else:
114+
callbacks=[history,lr_scheduler]
115+
model.fit_generator(datagen.flow(X_train, y_train, batch_size=batch_size),\
116+
samples_per_epoch=X_train.shape[0],nb_epoch=total_epochs,callbacks=callbacks,verbose=1)
117+
loss_data={'train': history.history['loss']}
118+
if opts.save_path!=None:
119+
loss_file='%s/%s.pkl'%(opts.save_path,memo)
120+
o=open(loss_file,'wb')
121+
pickle.dump(loss_data,o)
122+
o.close()
123+
124+

P2B1/candle_helper_functions.py

Lines changed: 181 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,181 @@
1+
from __future__ import absolute_import
2+
import theano
3+
import matplotlib
4+
if 'MACOSX' in matplotlib.get_backend().upper():
5+
matplotlib.use('TKAgg')
6+
import pylab as py
7+
py.ion() ## Turn on plot visualization
8+
9+
import gzip,pickle
10+
import numpy as np
11+
from PIL import Image
12+
import cv2
13+
import keras.backend as K
14+
K.set_image_dim_ordering('th')
15+
from keras.layers import Input
16+
from keras.models import Sequential,Model
17+
from keras.layers.core import Flatten, Dense, Dropout, Activation, Reshape
18+
from keras.layers.convolutional import Convolution2D, MaxPooling2D,Convolution1D
19+
from keras.layers.convolutional import ZeroPadding2D,UpSampling2D,Unpooling2D,perforated_Unpooling2D,DePool2D
20+
from keras.initializations import normal, identity, he_normal,glorot_normal,glorot_uniform,he_uniform
21+
from keras.layers.normalization import BatchNormalization
22+
import threading
23+
24+
############# Define Data Generators ################
25+
class ImageNoiseDataGenerator(object):
26+
'''Generate minibatches with
27+
realtime data augmentation.
28+
'''
29+
def __init__(self,corruption_level=0.5):
30+
31+
self.__dict__.update(locals())
32+
self.p=corruption_level
33+
self.lock = threading.Lock()
34+
35+
def _flow_index(self, N, batch_size=32, shuffle=False, seed=None):
36+
b = 0
37+
total_b = 0
38+
while 1:
39+
if b == 0:
40+
if seed is not None:
41+
np.random.seed(seed + total_b)
42+
43+
if shuffle:
44+
index_array = np.random.permutation(N)
45+
else:
46+
index_array = np.arange(N)
47+
48+
current_index = (b * batch_size) % N
49+
if N >= current_index + batch_size:
50+
current_batch_size = batch_size
51+
else:
52+
current_batch_size = N - current_index
53+
54+
if current_batch_size == batch_size:
55+
b += 1
56+
else:
57+
b = 0
58+
total_b += 1
59+
yield index_array[current_index: current_index + current_batch_size], current_index, current_batch_size
60+
61+
def flow(self, X, y, batch_size=32, shuffle=False, seed=None):
62+
assert len(X) == len(y)
63+
self.X = X
64+
self.y = y
65+
self.flow_generator = self._flow_index(X.shape[0], batch_size, shuffle, seed)
66+
return self
67+
68+
def __iter__(self):
69+
# needed if we want to do something like for x,y in data_gen.flow(...):
70+
return self
71+
72+
def next(self):
73+
# for python 2.x
74+
# Keep under lock only the mechainsem which advance the indexing of each batch
75+
# see # http://anandology.com/blog/using-iterators-and-generators/
76+
with self.lock:
77+
index_array, current_index, current_batch_size = next(self.flow_generator)
78+
# The transformation of images is not under thread lock so it can be done in parallel
79+
bX = np.zeros(tuple([current_batch_size] + list(self.X.shape)[1:]))
80+
for i, j in enumerate(index_array):
81+
x = self.X[j]
82+
x = self.insertnoise(x,corruption_level=self.p)
83+
bX[i] = x
84+
bY = self.y[index_array]
85+
return bX, bY
86+
87+
def __next__(self):
88+
# for python 3.x
89+
return self.next()
90+
91+
def insertnoise(self,x,corruption_level=0.5):
92+
return np.random.binomial(1,1-corruption_level,x.shape)*x
93+
94+
##### Define Neural Network Models ###################
95+
def dense_auto(weights_path=None,input_shape=(784,),hidden_layers=None,nonlinearity='relu'):
96+
input_img = Input(shape=input_shape)
97+
98+
if hidden_layers!=None:
99+
if type(hidden_layers)!=list:
100+
hidden_layers=list(hidden_layers)
101+
for i,l in enumerate(hidden_layers):
102+
if i==0:
103+
encoded=Dense(l,activation=nonlinearity)(input_img)
104+
else:
105+
encoded=Dense(l,activation=nonlinearity)(encoded)
106+
107+
for i,l in reversed(list(enumerate(hidden_layers))):
108+
if i <len(hidden_layers)-1:
109+
if i==len(hidden_layers)-2:
110+
decoded=Dense(l,activation=nonlinearity)(encoded)
111+
else:
112+
decoded=Dense(l,activation=nonlinearity)(decoded)
113+
decoded=Dense(input_shape[0])(decoded)
114+
else:
115+
decoded=Dense(input_shape[0])(input_img)
116+
117+
model=Model(input=input_img,output=decoded)
118+
119+
if weights_path:
120+
print('Loading Model')
121+
model.load_weights(weights_path)
122+
return model
123+
124+
def dense_simple(weights_path=None,input_shape=(784,),nonlinearity='relu'):
125+
model=Sequential()
126+
## encoder
127+
model.add(Dense(512,input_shape=input_shape,activation=nonlinearity))
128+
BatchNormalization()
129+
model.add(Dense(256,activation=nonlinearity))
130+
BatchNormalization()
131+
model.add(Dense(128,activation=nonlinearity))
132+
BatchNormalization()
133+
model.add(Dense(64,activation=nonlinearity))
134+
BatchNormalization()
135+
model.add(Dense(32,activation=nonlinearity))
136+
BatchNormalization()
137+
model.add(Dense(16,activation=nonlinearity))
138+
BatchNormalization()
139+
## decoder
140+
model.add(Dense(32))
141+
BatchNormalization()
142+
model.add(Dense(64))
143+
BatchNormalization()
144+
model.add(Dense(128))
145+
BatchNormalization()
146+
model.add(Dense(256))
147+
BatchNormalization()
148+
model.add(Dense(512))
149+
BatchNormalization()
150+
model.add(Dense(input_shape[0],activation='linear'))
151+
if weights_path:
152+
print('Loading Model')
153+
model.load_weights(weights_path)
154+
return model
155+
156+
157+
class autoencoder_preprocess():
158+
def __init__(self,img_size=(784,),noise_factor=0.):
159+
self.noise=noise_factor
160+
self.img_size=img_size
161+
self.lock = threading.Lock()
162+
163+
def add_noise(self,X_train):
164+
## Add noise to input data
165+
np.random.seed(100)
166+
ind=np.where(X_train==0)
167+
rn=self.noise*np.random.rand(np.shape(ind)[1])
168+
X_train[ind]=rn
169+
return X_train
170+
171+
def renormalize(self,X_train,mu,sigma):
172+
X_train=(X_train-mu)/sigma
173+
X_train = X_train.astype("float32")
174+
return X_train
175+
176+
def get_activations(model, layer, X_batch):
177+
get_activations = K.function([model.layers[0].input, K.learning_phase()], model.layers[layer].output)
178+
activations = get_activations([X_batch,0])
179+
return activations
180+
181+

0 commit comments

Comments
 (0)