From 5955e5c2983b13ba138fd3b7576990f8fbc52df7 Mon Sep 17 00:00:00 2001 From: syt123450 <421537891@qq.com> Date: Thu, 29 Nov 2018 03:38:54 -0800 Subject: [PATCH] concatenate1d (#14) --- src/merge/Concatenate.js | 9 +++ src/merge/factory/StrategyFactory.js | 5 +- src/merge/strategy/Concatenate1d.js | 96 ++++++++++++++++++++++++++++ test/test.html | 2 +- 4 files changed, 109 insertions(+), 3 deletions(-) create mode 100644 src/merge/strategy/Concatenate1d.js diff --git a/src/merge/Concatenate.js b/src/merge/Concatenate.js index e60bcdf0..b37fc87f 100644 --- a/src/merge/Concatenate.js +++ b/src/merge/Concatenate.js @@ -2,6 +2,7 @@ * @author syt123450 / https://github.com/syt123450 */ +import { MergedLayer1d } from "../layer/abstract/MergedLayer1d"; import { MergedLayer2d } from "../layer/abstract/MergedLayer2d"; import { MergedLayer3d } from "../layer/abstract/MergedLayer3d"; @@ -43,6 +44,14 @@ function Concatenate( layerList, config ) { if ( layerList[ 0 ].layerDimension === 1 ) { + return new MergedLayer1d( { + + operator: operatorType, + mergedElements: layerList, + userConfig: userConfig + + } ); + } else if ( layerList[ 0 ].layerDimension === 2 ) { return new MergedLayer2d( { diff --git a/src/merge/factory/StrategyFactory.js b/src/merge/factory/StrategyFactory.js index ee882232..fb42c6d8 100644 --- a/src/merge/factory/StrategyFactory.js +++ b/src/merge/factory/StrategyFactory.js @@ -20,6 +20,7 @@ import { Subtract1d } from "../strategy/Subtract1d"; import { Maximum1d } from "../strategy/Maximum1d"; import { Average1d } from "../strategy/Average1d"; import { Multiply1d } from "../strategy/Multiply1d"; +import { Concatenate1d } from "../strategy/Concatenate1d"; let StrategyFactory = ( function() { @@ -93,11 +94,11 @@ let StrategyFactory = ( function() { if ( operator === "add" ) { - return new Add2d( mergedElements ); + return new Add1d( mergedElements ); } else if ( operator === "concatenate" ) { - + return new Concatenate1d( mergedElements ); } else if ( operator === "subtract" ) { diff --git a/src/merge/strategy/Concatenate1d.js b/src/merge/strategy/Concatenate1d.js new file mode 100644 index 00000000..3dc77b3d --- /dev/null +++ b/src/merge/strategy/Concatenate1d.js @@ -0,0 +1,96 @@ +import { Strategy1d } from "../abstract/Strategy1d"; + +function Concatenate1d( mergedElements ) { + + Strategy1d.call( this, mergedElements ); + + this.strategyType = "Concatenate1d"; + +} + +Concatenate1d.prototype = Object.assign( Object.create( Strategy1d.prototype ), { + + validate: function() { + + return true; + + }, + + getOutputShape: function() { + + let units = 0; + + for (let i = 0; i < this.mergedElements.length; i ++) { + + units += this.mergedElements[ i ].outputShape[ 0 ]; + + } + + return [ units ]; + + }, + + getRelativeElements: function( selectedElement ) { + + let curveElements = []; + let straightElements = []; + + if ( selectedElement.elementType === "aggregationElement" || + selectedElement.elementType === "featureLine" ) { + + let request = { + + all: true + + }; + + for ( let i = 0; i < this.mergedElements.length; i ++ ) { + + let relativeResult = this.mergedElements[ i ].provideRelativeElements( request ); + let relativeElements = relativeResult.elementList; + + if ( this.mergedElements[ i ].layerIndex === this.layerIndex - 1 ) { + + for ( let j = 0; j < relativeElements.length; j ++ ) { + + straightElements.push( relativeElements[ j ] ); + + } + + } else { + + if ( relativeResult.isOpen ) { + + for ( let j = 0; j < relativeElements.length; j ++ ) { + + straightElements.push( relativeElements[ j ] ); + } + + } else { + + for ( let j = 0; j < relativeElements.length; j ++ ) { + + curveElements.push( relativeElements[ j ] ); + + } + + } + + } + + } + + } + + return { + + straight: straightElements, + curve: curveElements + + }; + + } + +} ); + +export { Concatenate1d }; \ No newline at end of file diff --git a/test/test.html b/test/test.html index cb2d84bf..fa728507 100644 --- a/test/test.html +++ b/test/test.html @@ -68,7 +68,7 @@ model.add( dense2 ); - let addLayer = TSP.layers.Average( [ dense1, dense2 ] ); + let addLayer = TSP.layers.Concatenate( [ dense1, dense2 ] ); model.add( addLayer );