Skip to content

Instantly share code, notes, and snippets.

@adcoh
Last active November 23, 2020 20:04
Show Gist options
  • Save adcoh/6df6d4dc1a7261a1bf1bc090b3b755e6 to your computer and use it in GitHub Desktop.
Save adcoh/6df6d4dc1a7261a1bf1bc090b3b755e6 to your computer and use it in GitHub Desktop.
The functions for the Streaming Dataset to generate stream of segments
def segments_generator(self, segment_list: _Segment) -> None:
"""
Generates original and augmented segments from a track.
"""
if self.config.get('get_shifts'):
segment_list = create_new_segments_from_splits(segment_list, nsplits=self.config['shift_segment'])
else:
segment_list = create_new_segments_from_splits(segment_list, nsplits=32)
if self.config.get('get_vertical_flip'):
flips = create_flipped_segments(segment_list, flip_type='vertical')
segment_list.extend(flips)
if self.config.get('get_horizontal_flip'):
flips = create_flipped_segments(segment_list, flip_type='horizontal')
segment_list.extend(flips)
for segment in segment_list:
if self.config['output_data_type'] == 'scalogram':
segment.assert_valid_scalogram()
else:
segment.assert_valid_spectrogram()
self.segment_blocks.extend(segment_list)
random.shuffle(self.segment_blocks)
def process_tracks_shuffle(self):
for i, track in enumerate(self.data):
self.segments_generator(track)
if i % self.config.get('tracks_in_memory', 100) == self.config.get('tracks_in_memory', 100):
segment_blocks = self.segment_blocks
self.segment_blocks = []
random.shuffle(segment_blocks)
yield segment_blocks
segment_blocks = self.segment_blocks
self.segment_blocks = []
random.shuffle(segment_blocks)
yield segment_blocks
def shuffle_stream(self):
return chain(self.process_tracks_shuffle())
# def linear_stream(self):
# return chain(self.segments_generator(track) for track in self.data)
def __iter__(self):
for segments in chain(self.shuffle_stream()):
yield from segments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment