[FEATURE] bottlenecks in WaveNet layers #185
Merged
+340
−68
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
This PR adds a configurable
bottleneckparameter toWaveNet::_Layerthat allows the intermediate number of channels (going into the activation) to differ from the input/output channels. This resolves issue #170.Changes
Core Implementation
bottleneckparameter to_Layerconstructor_bottleneckmember variable to store the actual bottleneck value (not doubled when gated)_Layer::SetMaxBufferSize()to correctly size_zand_output_headbased on bottleneck_Layer::Process()to use_bottleneckinstead ofchannelsfor internal operations_output_headto havebottleneckrows instead ofchannelsrowsLayerArray Updates
bottleneckparameter toLayerArrayParamsconstructor and member variable_LayerArrayconstructor to accept and passbottleneckto layers_head_rechannelto takebottleneckinput channels instead ofchannels_head_inputsto be resized tobottleneckrowsFactory Function
bottleneckfrom JSON configchannelsifbottleneckis not specified (maintains backward compatibility)Tests
bottleneckparameter (using named variables for legibility)test_layer_bottleneck()- tests bottleneck < channels for non-gated layerstest_layer_bottleneck_gated()- tests bottleneck with gated activationbottleneckrows for head outputsBug Fixes
NDEBUG(was using-U_NDEBUGinstead of-UNDEBUG)Testing
All tests pass, including the new bottleneck-specific tests.
Backward Compatibility
The factory function defaults
bottlenecktochannelswhen not specified in JSON, ensuring existing models continue to work without modification.Resolves #170