Skip to content

Commit ff5a0d0

Browse files
committed
Fix:CONFIG
1 parent d1628ff commit ff5a0d0

11 files changed

Lines changed: 179 additions & 78 deletions

File tree

config/CNN/data_spec.json

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
"random" : true,
77
"random_seed" : 123,
88
"dim_shuffle" : [0,3,2,1],
9-
"batch_size": 256,
109
"keep_flatten" : false,
1110
"reader_type" : "NP"
1211
},
@@ -18,7 +17,6 @@
1817
"random" : true,
1918
"random_seed" : 123,
2019
"dim_shuffle" : [0,3,2,1],
21-
"batch_size": 256,
2220
"keep_flatten" : false,
2321
"reader_type" : "NP"
2422
},
@@ -30,7 +28,6 @@
3028
"random" : true,
3129
"random_seed" : 123,
3230
"dim_shuffle" : [0,3,2,1],
33-
"batch_size": 256,
3431
"keep_flatten" : false,
3532
"reader_type" : "NP"
3633
}

config/CNN1/data_spec.json

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
"random_seed" : 123,
88
"input_shape" : [1,10,5],
99
"dim_shuffle" : [0,1,2,3],
10-
"batch_size": 8,
1110
"keep_flatten" : false,
1211
"reader_type" : "T1"
1312
},
@@ -20,7 +19,6 @@
2019
"random_seed" : 123,
2120
"input_shape" : [1,10,5],
2221
"dim_shuffle" : [0,1,2,3],
23-
"batch_size": 8,
2422
"keep_flatten" : false,
2523
"reader_type" : "T1"
2624
},
@@ -33,7 +31,6 @@
3331
"random_seed" : 123,
3432
"input_shape" : [1,10,5],
3533
"dim_shuffle" : [0,1,2,3],
36-
"batch_size": 8,
3734
"keep_flatten" : false,
3835
"reader_type" : "T1"
3936
}

config/DBN/data_spec.json

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@
55
"partition" : 200,
66
"random" : true,
77
"random_seed" : 123,
8-
"dim_shuffle" : [0,3,2,1],
9-
"batch_size": 256,
108
"keep_flatten" : true,
119
"reader_type" : "NP"
1210
},
@@ -17,8 +15,6 @@
1715
"partition" : 200,
1816
"random" : true,
1917
"random_seed" : 123,
20-
"dim_shuffle" : [0,3,2,1],
21-
"batch_size": 256,
2218
"keep_flatten" : true,
2319
"reader_type" : "NP"
2420
},
@@ -29,8 +25,6 @@
2925
"partition" : 200,
3026
"random" : true,
3127
"random_seed" : 123,
32-
"dim_shuffle" : [0,3,2,1],
33-
"batch_size": 256,
3428
"keep_flatten" : true,
3529
"reader_type" : "NP"
3630
}

config/SDA/data_spec.json

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@
55
"partition" : 200,
66
"random" : true,
77
"random_seed" : 123,
8-
"dim_shuffle" : [0,3,2,1],
9-
"batch_size": 256,
108
"keep_flatten" : true,
119
"reader_type" : "NP"
1210
},
@@ -17,8 +15,6 @@
1715
"partition" : 200,
1816
"random" : true,
1917
"random_seed" : 123,
20-
"dim_shuffle" : [0,3,2,1],
21-
"batch_size": 256,
2218
"keep_flatten" : true,
2319
"reader_type" : "NP"
2420
},
@@ -29,8 +25,6 @@
2925
"partition" : 200,
3026
"random" : true,
3127
"random_seed" : 123,
32-
"dim_shuffle" : [0,3,2,1],
33-
"batch_size": 256,
3428
"keep_flatten" : true,
3529
"reader_type" : "NP"
3630
}

io_modules/__init__.py

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11

2-
def setLogger(level="INFO",stderr=True,logFile='python-dnn.log',name=None):
2+
def setLogger(stderr=True,logFile='python-dnn.log',name=None):
33
import logging,sys
44

55
#get Logger
@@ -19,16 +19,7 @@ def setLogger(level="INFO",stderr=True,logFile='python-dnn.log',name=None):
1919
file_handler = logging.FileHandler(logFile)
2020
file_handler.setFormatter(formatter)
2121
logger.addHandler(file_handler)
22-
23-
# Set the level which determines what you see
24-
if level == "INFO":
25-
logger.setLevel(logging.INFO)
26-
elif level == "DEBUG":
27-
logger.setLevel(logging.DEBUG)
28-
elif level == "ERROR":
29-
logger.setLevel(logging.ERROR)
30-
else:
31-
logger.setLevel(logging.WARNING)
22+
3223

3324
def create_folder_structure_if_not_exists(filepath):
3425
import logging,os,errno

io_modules/file_reader.py

Lines changed: 25 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,13 @@
66
import logging
77
logger = logging.getLogger(__name__)
88

9-
def read_dataset(options,pad_zeros=False):
9+
def read_dataset(options,batch_size,pad_zeros=False):
1010
filepath = options['base_path'] + os.sep + options['filename'];
1111
logger.info("%s dataset will be initialized to reader to %s",
1212
options['reader_type'],filepath);
1313
logger.debug("options : %s" % str(options))
1414

15-
file_reader = FileReader.get_instance(filepath,options)
15+
file_reader = FileReader.get_instance(filepath,batch_size,options)
1616
file_header = file_reader.read_file_info()
1717

1818
shared_xy = file_reader.create_shared(pad_zeros)
@@ -39,16 +39,16 @@ class FileReader(object):
3939
num_pad_frames = 0;
4040

4141
@staticmethod
42-
def get_instance(filepath,options):
42+
def get_instance(filepath,batch_size,options):
4343
file_reader = None;
4444
if options['reader_type']=='NP':
45-
file_reader = NPFileReader(filepath,options);
45+
file_reader = NPFileReader(filepath,batch_size,options);
4646
elif options['reader_type']=='TD':
47-
file_reader = TDFileReader(filepath,options);
47+
file_reader = TDFileReader(filepath,batch_size,options);
4848
elif options['reader_type']=='T1':
49-
file_reader = T1FileReader(filepath,options);
49+
file_reader = T1FileReader(filepath,batch_size,options);
5050
elif options['reader_type']=='T2':
51-
file_reader = T2FileReader(filepath,options);
51+
file_reader = T2FileReader(filepath,batch_size,options);
5252
else:
5353
logger.critical('\'%s\' reader_type is not defined...'\
5454
%options['reader_type'])
@@ -125,9 +125,10 @@ def initialize_read(self):
125125

126126
class TDFileReader(FileReader):
127127
''' Reads the data stored in as Simple Text File'''
128-
def __init__(self,path,options):
128+
def __init__(self,path,batch_size,options):
129129
self.filepath = path;
130-
self.options=options;
130+
self.options = options;
131+
self.batch_size = batch_size
131132
self.lbl = options['label'];
132133
self.filehandle = open(self.filepath,'rb')
133134

@@ -141,7 +142,7 @@ def read_file_info(self):
141142
#self.frames_remaining = long(self.header[1])
142143
# partitions specifies approximate amount data to be loaded one operation
143144
self.frames_per_partition= self.options['partition'] *1000*1000/ (self.feat_dim * 4)
144-
batch_residual = self.frames_per_partition% self.options['batch_size']
145+
batch_residual = self.frames_per_partition% self.batch_size
145146
self.frames_per_partition = self.frames_per_partition - batch_residual
146147
return self.header
147148

@@ -191,9 +192,10 @@ def read_next_partition_data(self,already_read=0,pad_zeros=False):
191192

192193
class T2FileReader(FileReader):
193194
''' Reads the data stored in as Simple Text File With Two level header structure'''
194-
def __init__(self,path,options):
195+
def __init__(self,path,batch_size,options):
195196
self.filepath = path;
196197
self.options=options;
198+
self.batch_size=batch_size
197199
self.filehandle = open(self.filepath,'rb')
198200

199201
def read_file_info(self):
@@ -213,7 +215,7 @@ def read_file_info(self):
213215
self.header['featdim'] = self.feat_dim
214216
self.header['classes'] = self.classes
215217

216-
batch_size = self.options['batch_size']
218+
batch_size = self.batch_size
217219

218220
# partitions specifies approximate amount data to be loaded one operation
219221
self.frames_per_partition = self.options['partition'] *1000*1000/ (self.feat_dim * 4)
@@ -276,6 +278,7 @@ def read_next_partition_data(self,already_read=0,pad_zeros=False):
276278
self.partition_num = self.partition_num + 1
277279

278280
if not self.options['keep_flatten'] : #reshape the vector if needed
281+
logger.debug('T2 Filereader : Reshape input...')
279282
shape = [self.cur_frame_num];
280283
shape.extend(self.options['input_shape']);
281284
self.feat = self.feat.reshape(shape);
@@ -297,8 +300,9 @@ def read_next_partition_data(self,already_read=0,pad_zeros=False):
297300

298301
class T1FileReader(FileReader):
299302
''' Reads the data stored in as Simple Text File With One level header structure'''
300-
def __init__(self,path,options):
303+
def __init__(self,path,batch_size,options):
301304
self.filepath = path;
305+
self.batch_size = batch_size
302306
self.options=options;
303307
self.filehandle = open(self.filepath,'rb')
304308

@@ -314,7 +318,7 @@ def read_file_info(self):
314318

315319
self.header = {};
316320
self.header['featdim'] = self.feat_dim
317-
batch_size = self.options['batch_size']
321+
batch_size = self.batch_size
318322

319323
logger.debug('T1 Filereader : feat : %d' % self.feat_dim)
320324

@@ -370,6 +374,7 @@ def read_next_partition_data(self,already_read=0,pad_zeros=False):
370374
self.partition_num = self.partition_num + 1
371375

372376
if not self.options['keep_flatten'] : #reshape the vector if needed
377+
logger.debug('T1 Filereader : Reshape input...')
373378
shape = [self.cur_frame_num];
374379
shape.extend(self.options['input_shape']);
375380
self.feat = self.feat.reshape(shape);
@@ -388,8 +393,9 @@ def read_next_partition_data(self,already_read=0,pad_zeros=False):
388393

389394
class NPFileReader(FileReader):
390395
''' Reads the data stored in as Numpy Array'''
391-
def __init__(self,path,options):
396+
def __init__(self,path,batch_size,options):
392397
self.filepath = path;
398+
self.batch_size = batch_size
393399
self.options=options;
394400
self.filehandle = open(self.filepath,'rb')
395401

@@ -400,7 +406,7 @@ def read_file_info(self):
400406
logger.debug("NP Filereader : feats : %d"% self.feat_dim);
401407
# partitions specifies approximate amount data to be loaded one operation
402408
self.frames_per_partition= self.options['partition'] *1000*1000/ (self.feat_dim * 4)
403-
batch_residual = self.frames_per_partition% self.options['batch_size']
409+
batch_residual = self.frames_per_partition% self.batch_size
404410
self.frames_per_partition= self.frames_per_partition- batch_residual
405411
self.dtype = numpy.dtype({'names': ['d','l'],'formats': [('>f2',self.feat_dim),'>i2']})
406412
return self.header
@@ -417,9 +423,11 @@ def read_next_partition_data(self,already_read=0,pad_zeros=False):
417423
for x in xrange(self.num_pad_frames):
418424
self.label = numpy.append(self.label,[0]*self.feat_dim)
419425

420-
logger.debug('NP Filereader : from file %s, %d partition has %d frames' % (self.filepath,self.partition_num,self.cur_frame_num));
426+
logger.debug('NP Filereader : from file %s, %d partition has %d frames',
427+
self.filepath,self.partition_num,self.cur_frame_num);
421428

422429
if not self.options['keep_flatten'] : #reshape the vector if needed
430+
logger.debug('NP Filereader : Reshape input...')
423431
shape = [self.cur_frame_num];
424432
shape.extend(self.header['input_shape']);
425433
self.feat = self.feat.reshape(shape);

run.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,15 @@
2525
from io_modules import setLogger
2626

2727

28-
def setLoggerLevel(modelConfig):
28+
def setLoggerLevel(modelConfig,name=None):
29+
logger = logging.getLogger(name)
2930
# Set the level which determines what you see
3031
try:
3132
level = modelConfig['logger_level']
3233
except KeyError:
33-
level = "INFO"
34+
level = "DEBUG"
35+
36+
logger.info('Changing logger level:%s',level)
3437

3538
if level == "INFO":
3639
logger.setLevel(logging.INFO)

run/__init__.py

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
import time,numpy,os
2+
import logging
3+
logger = logging.getLogger(__name__)
4+
5+
def testing(nnetModel,test_sets, test_xy, test_x, test_y,batch_size):
6+
7+
# get the testing function for the model
8+
logger.info('Getting the Test function')
9+
test_fn = nnetModel.build_test_function((test_x, test_y), batch_size=batch_size)
10+
11+
logger.info('Starting Testing');
12+
13+
test_error = []
14+
test_output = numpy.array([],int);
15+
while not test_sets.is_finish():
16+
test_sets.make_partition_shared(test_xy)
17+
n_test_batches= test_sets.cur_frame_num / batch_size;
18+
for i in xrange(n_test_batches):
19+
pred, err = test_fn(i)
20+
test_error.append(err)
21+
test_output=numpy.append(test_output,pred)
22+
test_sets.read_next_partition_data()
23+
logger.debug("Test Error (upto curr part) = %f",numpy.mean(test_error))
24+
test_sets.initialize_read();
25+
26+
test_loss=numpy.mean(test_error)
27+
logger.info('Optimization complete with best Test score of %f %%',test_loss * 100)
28+
29+
return test_output,test_loss;
30+
31+
def fineTunning(nnetModel,train_sets,train_xy,train_x,train_y,
32+
valid_sets,valid_xy,valid_x,valid_y,lrate,momentum,batch_size):
33+
34+
def valid_score():
35+
valid_error = []
36+
while not valid_sets.is_finish():
37+
valid_sets.make_partition_shared(valid_xy)
38+
n_valid_batches= valid_sets.cur_frame_num / batch_size;
39+
validation_losses = [validate_fn(i) for i in xrange(n_valid_batches)]
40+
valid_error.append(validation_losses)
41+
valid_sets.read_next_partition_data()
42+
logger.debug("Valid Error (upto curr part) = %f",numpy.mean(valid_error))
43+
valid_sets.initialize_read();
44+
return numpy.mean(valid_error);
45+
46+
# get the training, validation function for the model
47+
logger.info('Getting the finetuning functions')
48+
train_fn, validate_fn = nnetModel.build_finetune_functions((train_x, train_y),
49+
(valid_x, valid_y), batch_size=batch_size)
50+
51+
best_validation_loss=float('Inf')
52+
53+
logger.info('Finetunning the model..');
54+
start_time = time.clock()
55+
56+
while (lrate.get_rate() != 0):
57+
train_error = []
58+
while not train_sets.is_finish():
59+
train_sets.make_partition_shared(train_xy)
60+
for batch_index in xrange(train_sets.cur_frame_num / batch_size): # loop over mini-batches
61+
train_error.append(train_fn(index=batch_index,
62+
learning_rate = lrate.get_rate(), momentum = momentum))
63+
logger.debug('Training batch %d error %f',batch_index, numpy.mean(train_error))
64+
train_sets.read_next_partition_data()
65+
logger.info('Fine Tunning:epoch %d, training error %f',lrate.epoch, numpy.mean(train_error));
66+
train_sets.initialize_read()
67+
68+
valid_error = valid_score()
69+
if valid_error < best_validation_loss:
70+
best_validation_loss=valid_error
71+
logger.info('Fine Tunning:epoch %d, validation error %f',lrate.epoch, valid_error);
72+
lrate.get_next_rate(current_error = 100 * valid_error)
73+
74+
end_time = time.clock()
75+
76+
logger.info('Best validation error %f',best_validation_loss)
77+
78+
logger.info('The Fine tunning ran for %.2fm' % ((end_time - start_time) / 60.))
79+
logger.info('Optimization complete with best validation score of %f %%', best_validation_loss * 100)
80+
81+
return best_validation_loss
82+
83+
84+
def getFeatures(nnetModel,data_spec_testing):
85+
out_function = nnetModel.getFeaturesFunction()
86+
test_sets, test_xy, test_x, test_y = read_dataset(data_spec_testing)
87+
while (not test_sets.is_finish()):
88+
data = out_function(test_sets.feat)
89+
test_sets.read_next_partition_data()
90+
#TODO write data
91+
92+
def createDir(wdir):
93+
"""create working dir"""
94+
wdir = os.path.abspath(wdir)
95+
logger.info("Creating working dir %s ...",wdir)
96+
if not os.path.exists(wdir):
97+
try:
98+
os.makedirs(wdir)
99+
logger.info("Creating working dir ... DONE");
100+
except Exception, e:
101+
raise e
102+
else:
103+
logger.info("Creating working dir ... Skipping");

0 commit comments

Comments
 (0)