in example/speech-demo/io_func/feat_io.py [0:0]
def load_next_block(self):
# if anything left...
# set_value
if self.crossed_part:
self.crossed_part = False
if not self.by_matrix: # <--- THERE IS A BUG IN THIS
return DataReadStream.END_OF_PARTITION
if self.done:
return DataReadStream.END_OF_DATA
if self._end_of_data():
if self.reader is not None:
self.reader.Cleanup()
self.reader = None # cleanup
self.done = True
return DataReadStream.END_OF_DATA
# keep loading features until we pass a partition or EOF
num_feats = 0
old_fileIndex = self.fileIndex
self.utt_id = None
while num_feats < self.chunk_size:
if self.split_parts:
if old_fileIndex != self.fileIndex:
self.crossed_part = True
break
if self._end_of_data():
break
tup = self._load_fn(self.chunk_size - num_feats)
if tup is None:
continue
(loaded_feat, loaded_label) = tup
if self.has_labels and loaded_label is None:
print(sys.stderr, "Missing labels for: ", self.utt_id)
continue
numFrames = loaded_feat.shape[0]
# limit loaded_feat, loaded_label, and numFrames to maximum allowed
allowed = self.maxFeats - self.totalFrames
if numFrames > allowed:
loaded_feat = loaded_feat[0:allowed]
if self.has_labels:
loaded_label = loaded_label[0:allowed]
numFrames = allowed
assert(numFrames == loaded_feat.shape[0])
self.totalFrames += numFrames
new_num_feats = num_feats + numFrames
# if the x and y buffers are too small, make bigger ones
# not possible any more; buffers are always fixed
"""
if new_num_feats > self.x.shape[0]:
newx = numpy.zeros((new_num_feats, self.n_ins), dtype=numpy.float32)
newx[0:num_feats] = self.x[0:num_feats]
self.x = newx
if self.has_labels:
newy = numpy.zeros((new_num_feats,), dtype=numpy.int32)
newy[0:num_feats] = self.y[0:num_feats]
self.y = newy
"""
# place into [num_feats:num_feats+num_loaded]
self.x[num_feats:new_num_feats] = loaded_feat
if self.has_labels:
self.y[num_feats:new_num_feats] = loaded_label
num_feats = new_num_feats
if self.by_matrix:
break
# if we loaded features, shuffle and copy to shared
if num_feats != 0:
if self.shuffle:
x = self.x[0:num_feats]
state = self.numpy_rng.get_state()
self.numpy_rng.shuffle(x)
self.x[0:num_feats] = x
if self.has_labels:
y = self.y[0:num_feats]
self.numpy_rng.set_state(state)
self.numpy_rng.shuffle(y)
self.y[0:num_feats] = y
assert(self.x.shape == (self.chunk_size, self.n_ins))
self.shared_x.set_value(self.x, borrow = True)
if self.has_labels:
self.shared_y.set_value(self.y, borrow = True)
#import hashlib
#print self.totalFrames, self.x.sum(), hashlib.sha1(self.x.view(numpy.float32)).hexdigest()
if self.by_matrix:
self.crossed_part = True
return num_feats