function Reshape( config ) {
		
		this.config = config;
		
		if ( this.config !== undefined ) {
			
			this.name = this.config.name;
			
		} else {
			
			this.name = undefined;
			
		}
		
		/**
		 * Use State Pattern to handle reshape cases.
		 * Three States: Reshape1d, Reshape2d and Reshape3d
		 * Based on different states, create different `actualLayer`.
		 *
		 * @type { String }
		 */
		
		this.reshapeType = undefined;
		
		/**
		 * Reshape layer is a proxy, store reference of actual layer.
		 * Three types of actual layers: Reshape1d, Reshape2d, Reshape3d.
		 *
		 * @type { Layer }
		 */
		this.actualLayer = undefined;
		
		/**
		 * Attributes below are important layer metrics for a TensorSpace Layers,
		 * These metrics will be injected or updated by calling updateLayerMetric()
		 */
		
		this.neuralValue = undefined;
		this.inputShape = undefined;
		this.outputShape = undefined;
		
		this.autoOutputDetect = false;
		
		this.actualWidth = undefined;
		this.actualHeight = undefined;
		this.actualDepth = undefined;
		
		this.depth = undefined;
		
		this.layerDimension = undefined;
		this.openFmCenters = undefined;
		
		this.lastLayer = undefined;
		
		if ( config !== undefined &&
			( config.targetShape !== undefined || config.shape !== undefined ) ) {
			
			this.setReshapeType();
			this.createActualLayer();
			this.updateLayerMetric();
		
		}
		
	}
Use State Pattern to handle reshape cases.
Three States: Reshape1d, Reshape2d and Reshape3d
Based on different states, create different `actualLayer`.

@type { String }