diff --git a/src/Model.js b/src/Model.js index aa45179..7cafbda 100644 --- a/src/Model.js +++ b/src/Model.js @@ -184,7 +184,9 @@ export default class Model { }) this.modelLayersMap.set(inputName, layer) this.modelDAG[inputName] = { + layerClass: 'Input', name: inputName, + inbound: [], outbound: [] } this.inputTensors[inputName] = new Tensor([], inputShape) @@ -192,6 +194,9 @@ export default class Model { if (layerClass in layers) { const attrs = mapKeys(layerConfig, (v, k) => camelCase(k)) + if ('activation' in attrs) { + attrs.activation = camelCase(attrs.activation) + } const layer = new layers[layerClass](attrs) // layer weights @@ -214,13 +219,16 @@ export default class Model { this.modelLayersMap.set(layerConfig.name, layer) this.modelDAG[layerConfig.name] = { + layerClass, name: layerConfig.name, + inbound: [], outbound: [] } if (index === 0) { this.modelDAG[inputName].outbound.push(layerConfig.name) } else { const prevLayerConfig = modelConfig[index - 1].config + this.modelDAG[layerConfig.name].inbound.push(prevLayerConfig.name) this.modelDAG[prevLayerConfig.name].outbound.push(layerConfig.name) } } else { @@ -230,6 +238,39 @@ export default class Model { } } + /** + * Generator function for recursively traversing the DAG + */ + * traverseDAG (nodes) { + if (nodes.length === 0) { + return true + } else if (nodes.length === 1) { + const node = nodes[0] + const { layerClass, inbound, outbound } = this.modelDAG[node] + if (layerClass !== 'Input') { + let currentLayer = this.modelLayersMap.get(node) + console.log(currentLayer) + const inboundLayers = inbound.map(n => this.modelLayersMap.get(n)) + while (!every(inboundLayers.map(layer => layer.hasResult))) { + yield + } + if (layerClass === 'Merge') { + currentLayer.result = currentLayer.call(inboundLayers.map(layer => layer.result)) + currentLayer.hasResult = true + } else { + if (inboundLayers.length !== 1) { + throw new Error(`Layer name ${currentLayer.name} has ${inboundLayers.length} inbound nodes, but is not a Merge layer.`) + } + currentLayer.result = currentLayer.call(inboundLayers[0].result) + currentLayer.hasResult = true + } + } + yield * this.traverseDAG(outbound) + } else { + yield * nodes.map(node => this.traverseDAG([node])) + } + } + /** * Predict API */ @@ -242,8 +283,23 @@ export default class Model { throw new Error('predict() must take an object where the values are the flattened data as Float32Array.') } + // reset hasResult flag in all layers + for (let layer of this.modelLayersMap.values()) { + layer.hasResult = false + } + + // load data to input tensors inputNames.forEach(inputName => { this.inputTensors[inputName].tensor.data = inputData[inputName] + let inputLayer = this.modelLayersMap.get(inputName) + inputLayer.result = inputLayer.call(this.inputTensors[inputName]) + this.modelLayersMap.get(inputName).hasResult = true }) + + // start traversing DAG at input + let traversing = this.traverseDAG(inputNames) + while (!traversing.next().done) { + console.log('blah') + } } } diff --git a/src/index.js b/src/index.js index 575f9d4..061ee95 100644 --- a/src/index.js +++ b/src/index.js @@ -5,7 +5,7 @@ import * as layers from './layers' let testUtils if (process.env.NODE_ENV !== 'production') { - testUtils = require('./test-utils') + testUtils = require('./testUtils') } export { diff --git a/src/layers/advanced_activations/ELU.js b/src/layers/advanced_activations/ELU.js index b834d21..daa082b 100644 --- a/src/layers/advanced_activations/ELU.js +++ b/src/layers/advanced_activations/ELU.js @@ -7,10 +7,15 @@ import cwise from 'cwise' export default class ELU extends Layer { /** * Creates a ELU activation layer - * @param {number} alpha - scale for the negative factor + * @param {number} attrs.alpha - scale for the negative factor */ - constructor (alpha = 1.0, attrs = {}) { + constructor (attrs = {}) { super(attrs) + + const { + alpha = 1.0 + } = attrs + this.alpha = alpha } diff --git a/src/layers/advanced_activations/LeakyReLU.js b/src/layers/advanced_activations/LeakyReLU.js index 0be772a..25ab4cc 100644 --- a/src/layers/advanced_activations/LeakyReLU.js +++ b/src/layers/advanced_activations/LeakyReLU.js @@ -7,10 +7,15 @@ import { relu } from '../../activations' export default class LeakyReLU extends Layer { /** * Creates a LeakyReLU activation layer - * @param {number} alpha - negative slope coefficient + * @param {number} attrs.alpha - negative slope coefficient */ - constructor (alpha = 0.3, attrs = {}) { + constructor (attrs = {}) { super(attrs) + + const { + alpha = 0.3 + } = attrs + this.alpha = alpha } diff --git a/src/layers/advanced_activations/ThresholdedReLU.js b/src/layers/advanced_activations/ThresholdedReLU.js index 287e33f..00eca92 100644 --- a/src/layers/advanced_activations/ThresholdedReLU.js +++ b/src/layers/advanced_activations/ThresholdedReLU.js @@ -7,10 +7,15 @@ import cwise from 'cwise' export default class ThresholdedReLU extends Layer { /** * Creates a ThresholdedReLU activation layer - * @param {number} theta - float >= 0. Threshold location of activation. + * @param {number} attrs.theta - float >= 0. Threshold location of activation. */ - constructor (theta = 1.0, attrs = {}) { + constructor (attrs = {}) { super(attrs) + + const { + theta = 1.0 + } = attrs + this.theta = theta } diff --git a/src/layers/convolutional/AtrousConvolution2D.js b/src/layers/convolutional/AtrousConvolution2D.js index 4d7d9e8..e5d7e09 100644 --- a/src/layers/convolutional/AtrousConvolution2D.js +++ b/src/layers/convolutional/AtrousConvolution2D.js @@ -13,13 +13,13 @@ import flattenDeep from 'lodash/flattenDeep' export default class AtrousConvolution2D extends Convolution2D { /** * Creates a AtrousConvolution2D layer - * @param {number} nbFilter - Number of convolution filters to use. - * @param {number} nbRow - Number of rows in the convolution kernel. - * @param {number} nbCol - Number of columns in the convolution kernel. + * @param {number} attrs.nbFilter - Number of convolution filters to use. + * @param {number} attrs.nbRow - Number of rows in the convolution kernel. + * @param {number} attrs.nbCol - Number of columns in the convolution kernel. * @param {Object} [attrs] - layer attributes */ - constructor (nbFilter, nbRow, nbCol, attrs = {}) { - super(nbFilter, nbRow, nbCol, attrs) + constructor (attrs = {}) { + super(attrs) const { atrousRate = [1, 1] } = attrs diff --git a/src/layers/convolutional/Convolution1D.js b/src/layers/convolutional/Convolution1D.js index cabbfb2..c2a9320 100644 --- a/src/layers/convolutional/Convolution1D.js +++ b/src/layers/convolutional/Convolution1D.js @@ -9,13 +9,15 @@ import unsqueeze from 'ndarray-unsqueeze' export default class Convolution1D extends Layer { /** * Creates a Convolution1D layer - * @param {number} nbFilter - Number of convolution filters to use. - * @param {number} filterLength - Length of 1D convolution kernel. + * @param {number} attrs.nbFilter - Number of convolution filters to use. + * @param {number} attrs.filterLength - Length of 1D convolution kernel. * @param {Object} [attrs] - layer attributes */ - constructor (nbFilter, filterLength, attrs = {}) { + constructor (attrs = {}) { super(attrs) const { + nbFilter = 1, + filterLength = 1, activation = 'linear', borderMode = 'valid', subsampleLength = 1, @@ -33,7 +35,10 @@ export default class Convolution1D extends Layer { // Convolution1D is actually a shim on top of Convolution2D, where // all of the computational action is performed // Note that Keras uses `th` dim ordering here. - this._conv2d = new Convolution2D(nbFilter, filterLength, 1, { + this._conv2d = new Convolution2D({ + nbFilter, + nbRow: filterLength, + nbCol: 1, activation, borderMode, subsample: [subsampleLength, 1], diff --git a/src/layers/convolutional/Convolution2D.js b/src/layers/convolutional/Convolution2D.js index 2904f00..f4fb197 100644 --- a/src/layers/convolutional/Convolution2D.js +++ b/src/layers/convolutional/Convolution2D.js @@ -12,14 +12,17 @@ import flattenDeep from 'lodash/flattenDeep' export default class Convolution2D extends Layer { /** * Creates a Convolution2D layer - * @param {number} nbFilter - Number of convolution filters to use. - * @param {number} nbRow - Number of rows in the convolution kernel. - * @param {number} nbCol - Number of columns in the convolution kernel. + * @param {number} attrs.nbFilter - Number of convolution filters to use. + * @param {number} attrs.nbRow - Number of rows in the convolution kernel. + * @param {number} attrs.nbCol - Number of columns in the convolution kernel. * @param {Object} [attrs] - layer attributes */ - constructor (nbFilter, nbRow, nbCol, attrs = {}) { + constructor (attrs = {}) { super(attrs) const { + nbFilter = 1, + nbRow = 3, + nbCol = 3, activation = 'linear', borderMode = 'valid', subsample = [1, 1], diff --git a/src/layers/convolutional/Convolution3D.js b/src/layers/convolutional/Convolution3D.js index 56c0459..da244af 100644 --- a/src/layers/convolutional/Convolution3D.js +++ b/src/layers/convolutional/Convolution3D.js @@ -12,15 +12,19 @@ import flattenDeep from 'lodash/flattenDeep' export default class Convolution3D extends Layer { /** * Creates a Convolution3D layer - * @param {number} nbFilter - Number of convolution filters to use. - * @param {number} kernelDim1 - Length of the first dimension in the convolution kernel. - * @param {number} kernelDim2 - Length of the second dimension in the convolution kernel. - * @param {number} kernelDim3 - Length of the third dimension in the convolution kernel. + * @param {number} attrs.nbFilter - Number of convolution filters to use. + * @param {number} attrs.kernelDim1 - Length of the first dimension in the convolution kernel. + * @param {number} attrs.kernelDim2 - Length of the second dimension in the convolution kernel. + * @param {number} attrs.kernelDim3 - Length of the third dimension in the convolution kernel. * @param {Object} [attrs] - layer attributes */ - constructor (nbFilter, kernelDim1, kernelDim2, kernelDim3, attrs = {}) { + constructor (attrs = {}) { super(attrs) const { + nbFilter = 1, + kernelDim1 = 1, + kernelDim2 = 1, + kernelDim3 = 1, activation = 'linear', borderMode = 'valid', subsample = [1, 1, 1], diff --git a/src/layers/convolutional/Deconvolution2D.js b/src/layers/convolutional/Deconvolution2D.js index 36528cf..d43ee5a 100644 --- a/src/layers/convolutional/Deconvolution2D.js +++ b/src/layers/convolutional/Deconvolution2D.js @@ -12,16 +12,20 @@ import flattenDeep from 'lodash/flattenDeep' export default class Deconvolution2D extends Layer { /** * Creates a Deconvolution2D layer - * @param {number} nbFilter - Number of convolution filters to use. - * @param {number} nbRow - Number of rows in the convolution kernel. - * @param {number} nbCol - Number of columns in the convolution kernel. - * @param {number[]} outputShape - Output shape of the transposed convolution operation. + * @param {number} attrs.nbFilter - Number of convolution filters to use. + * @param {number} attrs.nbRow - Number of rows in the convolution kernel. + * @param {number} attrs.nbCol - Number of columns in the convolution kernel. + * @param {number[]} attrs.outputShape - Output shape of the transposed convolution operation. * Array of integers [nbFilter, outputRows, outputCols] * @param {Object} [attrs] - layer attributes */ - constructor (nbFilter, nbRow, nbCol, outputShape, attrs = {}) { + constructor (attrs = {}) { super(attrs) const { + nbFilter = 1, + nbRow = 1, + nbCol = 1, + outputShape = [], activation = 'linear', borderMode = 'valid', subsample = [1, 1], diff --git a/src/layers/convolutional/SeparableConvolution2D.js b/src/layers/convolutional/SeparableConvolution2D.js index 464660a..bd2d9f0 100644 --- a/src/layers/convolutional/SeparableConvolution2D.js +++ b/src/layers/convolutional/SeparableConvolution2D.js @@ -10,14 +10,17 @@ import ops from 'ndarray-ops' export default class SeparableConvolution2D extends Layer { /** * Creates a SeparableConvolution2D layer - * @param {number} nbFilter - Number of convolution filters to use. - * @param {number} nbRow - Number of rows in the convolution kernel. - * @param {number} nbCol - Number of columns in the convolution kernel. + * @param {number} attrs.nbFilter - Number of convolution filters to use. + * @param {number} attrs.nbRow - Number of rows in the convolution kernel. + * @param {number} attrs.nbCol - Number of columns in the convolution kernel. * @param {Object} [attrs] - layer attributes */ - constructor (nbFilter, nbRow, nbCol, attrs = {}) { + constructor (attrs = {}) { super(attrs) const { + nbFilter = 1, + nbRow = 1, + nbCol = 1, activation = 'linear', borderMode = 'valid', subsample = [1, 1], @@ -53,10 +56,10 @@ export default class SeparableConvolution2D extends Layer { // SeparableConvolution2D has two components: depthwise, and pointwise. // Activation function and bias is applied at the end. // Subsampling (striding) only performed on depthwise part, not the pointwise part. - const depthwiseConvAttrs = { activation: 'linear', borderMode, subsample, dimOrdering, bias: false } - const pointwiseConvAttrs = { activation: 'linear', borderMode, subsample: [1, 1], dimOrdering, bias: false } - this._depthwiseConv = new Convolution2D(this.depthMultiplier, nbRow, nbCol, depthwiseConvAttrs) - this._pointwiseConv = new Convolution2D(nbFilter, 1, 1, pointwiseConvAttrs) + const depthwiseConvAttrs = { nbFilter: this.depthMultiplier, nbRow, nbCol, activation: 'linear', borderMode, subsample, dimOrdering, bias: false } + const pointwiseConvAttrs = { nbFilter, nbRow: 1, nbCol: 1, activation: 'linear', borderMode, subsample: [1, 1], dimOrdering, bias: false } + this._depthwiseConv = new Convolution2D(depthwiseConvAttrs) + this._pointwiseConv = new Convolution2D(pointwiseConvAttrs) } /** diff --git a/src/layers/convolutional/UpSampling1D.js b/src/layers/convolutional/UpSampling1D.js index c6dd783..423de37 100644 --- a/src/layers/convolutional/UpSampling1D.js +++ b/src/layers/convolutional/UpSampling1D.js @@ -8,10 +8,13 @@ import ops from 'ndarray-ops' export default class UpSampling1D extends Layer { /** * Creates a UpSampling1D activation layer - * @param {number} length - upsampling factor + * @param {number} attrs.length - upsampling factor */ - constructor (length = 2, attrs = {}) { + constructor (attrs = {}) { super(attrs) + const { + length = 2 + } = attrs this.length = length } diff --git a/src/layers/convolutional/UpSampling2D.js b/src/layers/convolutional/UpSampling2D.js index 38927a5..406bc1a 100644 --- a/src/layers/convolutional/UpSampling2D.js +++ b/src/layers/convolutional/UpSampling2D.js @@ -8,11 +8,12 @@ import ops from 'ndarray-ops' export default class UpSampling2D extends Layer { /** * Creates a UpSampling2D activation layer - * @param {number} size - upsampling factor + * @param {number} attrs.size - upsampling factor */ - constructor (size = [2, 2], attrs = {}) { + constructor (attrs = {}) { super(attrs) const { + size = [2, 2], dimOrdering = 'tf' } = attrs diff --git a/src/layers/convolutional/UpSampling3D.js b/src/layers/convolutional/UpSampling3D.js index 4b84df3..193ecd3 100644 --- a/src/layers/convolutional/UpSampling3D.js +++ b/src/layers/convolutional/UpSampling3D.js @@ -8,11 +8,12 @@ import ops from 'ndarray-ops' export default class UpSampling3D extends Layer { /** * Creates a UpSampling3D activation layer - * @param {number} size - upsampling factor + * @param {number} attrs.size - upsampling factor */ - constructor (size = [2, 2, 2], attrs = {}) { + constructor (attrs = {}) { super(attrs) const { + size = [2, 2, 2], dimOrdering = 'tf' } = attrs diff --git a/src/layers/convolutional/ZeroPadding1D.js b/src/layers/convolutional/ZeroPadding1D.js index 33b7725..5a15c8d 100644 --- a/src/layers/convolutional/ZeroPadding1D.js +++ b/src/layers/convolutional/ZeroPadding1D.js @@ -8,10 +8,13 @@ import ops from 'ndarray-ops' export default class ZeroPadding1D extends Layer { /** * Creates a ZeroPadding1D activation layer - * @param {number} padding - length of padding + * @param {number} attrs.padding - length of padding */ - constructor (padding = 1, attrs = {}) { + constructor (attrs = {}) { super(attrs) + const { + padding = 1 + } = attrs this.padding = padding } diff --git a/src/layers/convolutional/ZeroPadding2D.js b/src/layers/convolutional/ZeroPadding2D.js index 6e2b3b1..22808c9 100644 --- a/src/layers/convolutional/ZeroPadding2D.js +++ b/src/layers/convolutional/ZeroPadding2D.js @@ -8,11 +8,12 @@ import ops from 'ndarray-ops' export default class ZeroPadding2D extends Layer { /** * Creates a ZeroPadding2D activation layer - * @param {number} padding - size of padding + * @param {number} attrs.padding - size of padding */ - constructor (padding = [1, 1], attrs = {}) { + constructor (attrs = {}) { super(attrs) const { + padding = [1, 1], dimOrdering = 'tf' } = attrs diff --git a/src/layers/convolutional/ZeroPadding3D.js b/src/layers/convolutional/ZeroPadding3D.js index 6358aa8..1004ee2 100644 --- a/src/layers/convolutional/ZeroPadding3D.js +++ b/src/layers/convolutional/ZeroPadding3D.js @@ -8,11 +8,12 @@ import ops from 'ndarray-ops' export default class ZeroPadding3D extends Layer { /** * Creates a ZeroPadding3D activation layer - * @param {number} padding - size of padding + * @param {number} attrs.padding - size of padding */ - constructor (padding = [1, 1, 1], attrs = {}) { + constructor (attrs = {}) { super(attrs) const { + padding = [1, 1, 1], dimOrdering = 'tf' } = attrs diff --git a/src/layers/core/Activation.js b/src/layers/core/Activation.js index 4bda0ba..506989d 100644 --- a/src/layers/core/Activation.js +++ b/src/layers/core/Activation.js @@ -7,10 +7,15 @@ import Layer from '../../Layer' export default class Activation extends Layer { /** * Creates an Activation layer - * @param {string} activation - name of activation function + * @param {string} attrs.activation - name of activation function */ - constructor (activation, attrs = {}) { + constructor (attrs = {}) { super(attrs) + + const { + activation = 'linear' + } = attrs + this.activation = activations[activation] } diff --git a/src/layers/core/Dense.js b/src/layers/core/Dense.js index eb36e3f..dd409c7 100644 --- a/src/layers/core/Dense.js +++ b/src/layers/core/Dense.js @@ -10,12 +10,13 @@ import ops from 'ndarray-ops' export default class Dense extends Layer { /** * Creates a Dense layer - * @param {number} outputDim - output dimension size + * @param {number} attrs.outputDim - output dimension size * @param {Object} [attrs] - layer attributes */ - constructor (outputDim, attrs = {}) { + constructor (attrs = {}) { super(attrs) const { + outputDim = 1, activation = 'linear', inputDim = null, bias = true diff --git a/src/layers/core/Dropout.js b/src/layers/core/Dropout.js index b637d8d..028d958 100644 --- a/src/layers/core/Dropout.js +++ b/src/layers/core/Dropout.js @@ -7,10 +7,15 @@ import Layer from '../../Layer' export default class Dropout extends Layer { /** * Creates an Dropout layer - * @param {number} p - fraction of the input units to drop (between 0 and 1) + * @param {number} attrs.p - fraction of the input units to drop (between 0 and 1) */ - constructor (p, attrs = {}) { + constructor (attrs = {}) { super(attrs) + + const { + p = 0.5 + } = attrs + this.p = Math.min(Math.max(0, p), 1) } diff --git a/src/layers/core/MaxoutDense.js b/src/layers/core/MaxoutDense.js index 2c11be4..d0c6aeb 100644 --- a/src/layers/core/MaxoutDense.js +++ b/src/layers/core/MaxoutDense.js @@ -13,12 +13,13 @@ import ops from 'ndarray-ops' export default class MaxoutDense extends Layer { /** * Creates a MaxoutDense layer - * @param {number} outputDim - output dimension size + * @param {number} attrs.outputDim - output dimension size * @param {Object} [attrs] - layer attributes */ - constructor (outputDim, attrs = {}) { + constructor (attrs = {}) { super(attrs) const { + outputDim = 1, inputDim = null, bias = true } = attrs diff --git a/src/layers/core/Permute.js b/src/layers/core/Permute.js index c71e292..b304bdb 100644 --- a/src/layers/core/Permute.js +++ b/src/layers/core/Permute.js @@ -8,10 +8,13 @@ import Layer from '../../Layer' export default class Permute extends Layer { /** * Creates a Permute layer - * @param {number[]} dims + * @param {number[]} attrs.dims */ - constructor (dims, attrs = {}) { + constructor (attrs = {}) { super(attrs) + const { + dims = [] + } = attrs this.dims = dims.map(dim => dim - 1) } diff --git a/src/layers/core/RepeatVector.js b/src/layers/core/RepeatVector.js index 329aec0..3558bd8 100644 --- a/src/layers/core/RepeatVector.js +++ b/src/layers/core/RepeatVector.js @@ -10,10 +10,13 @@ import tile from 'ndarray-tile' export default class RepeatVector extends Layer { /** * Creates a RepeatVector layer - * @param {number} n + * @param {number} attrs.n */ - constructor (n, attrs = {}) { + constructor (attrs = {}) { super(attrs) + const { + n = 1 + } = attrs this.n = n } diff --git a/src/layers/core/Reshape.js b/src/layers/core/Reshape.js index 8fee418..d29d796 100644 --- a/src/layers/core/Reshape.js +++ b/src/layers/core/Reshape.js @@ -11,10 +11,13 @@ import flattenDeep from 'lodash/flattenDeep' export default class Reshape extends Layer { /** * Creates a Reshape layer - * @param {number[]} shape + * @param {number[]} attrs.shape */ - constructor (shape, attrs = {}) { + constructor (attrs = {}) { super(attrs) + const { + shape = [] + } = attrs this.shape = shape } diff --git a/src/layers/embeddings/Embedding.js b/src/layers/embeddings/Embedding.js index c7b462b..f8b079a 100644 --- a/src/layers/embeddings/Embedding.js +++ b/src/layers/embeddings/Embedding.js @@ -9,9 +9,11 @@ export default class Embedding extends Layer { /** * Creates a Embedding layer */ - constructor (inputDim, outputDim, attrs = {}) { + constructor (attrs = {}) { super(attrs) const { + inputDim = 1, + outputDim = 1, inputLength = 0, maskZero = false, dropout = 0.0 diff --git a/src/test-utils.js b/src/testUtils.js similarity index 100% rename from src/test-utils.js rename to src/testUtils.js diff --git a/test/advanced_activations/advanced_activations.js b/test/advanced_activations/advanced_activations.js index e259c0a..fc2b6a7 100644 --- a/test/advanced_activations/advanced_activations.js +++ b/test/advanced_activations/advanced_activations.js @@ -24,7 +24,7 @@ describe('advanced activation layers', function () { it('[advanced_activations.LeakyReLU.0] should produce expected values', function () { const key = 'advanced_activations.LeakyReLU.0' console.log(`\n%c[${key}] alpha=0.4`, styles.h3) - let testLayer = new layers.LeakyReLU(0.4) + let testLayer = new layers.LeakyReLU({ alpha: 0.4 }) let t = new KerasJS.Tensor(TEST_DATA[key].input.data, TEST_DATA[key].input.shape) console.log('%cin', styles.h4, stringifyCondensed(t.tensor)) const startTime = performance.now() @@ -79,7 +79,7 @@ describe('advanced activation layers', function () { it('[advanced_activations.ELU.0] should produce expected values', function () { const key = 'advanced_activations.ELU.0' console.log(`\n%c[${key}] alpha=1.1`, styles.h3) - let testLayer = new layers.ELU(1.1) + let testLayer = new layers.ELU({ alpha: 1.1 }) let t = new KerasJS.Tensor(TEST_DATA[key].input.data, TEST_DATA[key].input.shape) console.log('%cin', styles.h4, stringifyCondensed(t.tensor)) const startTime = performance.now() @@ -134,7 +134,7 @@ describe('advanced activation layers', function () { it('[advanced_activations.ThresholdedReLU.0] should produce expected values', function () { const key = 'advanced_activations.ThresholdedReLU.0' console.log(`\n%c[${key}] theta=0.9`, styles.h3) - let testLayer = new layers.ThresholdedReLU(0.9) + let testLayer = new layers.ThresholdedReLU({ theta: 0.9 }) let t = new KerasJS.Tensor(TEST_DATA[key].input.data, TEST_DATA[key].input.shape) console.log('%cin', styles.h4, stringifyCondensed(t.tensor)) const startTime = performance.now() diff --git a/test/convolutional/AtrousConvolution2D.js b/test/convolutional/AtrousConvolution2D.js index 22295ad..1c75ab5 100644 --- a/test/convolutional/AtrousConvolution2D.js +++ b/test/convolutional/AtrousConvolution2D.js @@ -57,7 +57,7 @@ describe('convolutional layer: AtrousConvolution2D', function () { it(title, function () { console.log(`\n%c${title}`, styles.h3) - let testLayer = new layers.AtrousConvolution2D(nbFilter, nbRow, nbCol, attrs) + let testLayer = new layers.AtrousConvolution2D(Object.assign({ nbFilter, nbRow, nbCol }, attrs)) testLayer.setWeights(TEST_DATA[key].weights.map(w => new KerasJS.Tensor(w.data, w.shape))) let t = new KerasJS.Tensor(TEST_DATA[key].input.data, TEST_DATA[key].input.shape) console.log('%cin', styles.h4, stringifyCondensed(t.tensor)) @@ -91,7 +91,7 @@ describe('convolutional layer: AtrousConvolution2D', function () { it(title, function () { console.log(`\n%c${title}`, styles.h3) - let testLayer = new layers.AtrousConvolution2D(nbFilter, nbRow, nbCol, attrs) + let testLayer = new layers.AtrousConvolution2D(Object.assign({ nbFilter, nbRow, nbCol }, attrs)) testLayer.setWeights(TEST_DATA[key].weights.map(w => new KerasJS.Tensor(w.data, w.shape))) let t = new KerasJS.Tensor(TEST_DATA[key].input.data, TEST_DATA[key].input.shape, { useWeblas: true }) console.log('%cin', styles.h4, stringifyCondensed(t.tensor)) diff --git a/test/convolutional/Convolution1D.js b/test/convolutional/Convolution1D.js index 9ab3aae..071dcd9 100644 --- a/test/convolutional/Convolution1D.js +++ b/test/convolutional/Convolution1D.js @@ -52,7 +52,7 @@ describe('convolutional layer: Convolution1D', function () { it(title, function () { console.log(`\n%c${title}`, styles.h3) - let testLayer = new layers.Convolution1D(nbFilter, filterLength, attrs) + let testLayer = new layers.Convolution1D(Object.assign({ nbFilter, filterLength }, attrs)) testLayer.setWeights(TEST_DATA[key].weights.map(w => new KerasJS.Tensor(w.data, w.shape))) let t = new KerasJS.Tensor(TEST_DATA[key].input.data, TEST_DATA[key].input.shape) console.log('%cin', styles.h4, stringifyCondensed(t.tensor)) @@ -86,7 +86,7 @@ describe('convolutional layer: Convolution1D', function () { it(title, function () { console.log(`\n%c${title}`, styles.h3) - let testLayer = new layers.Convolution1D(nbFilter, filterLength, attrs) + let testLayer = new layers.Convolution1D(Object.assign({ nbFilter, filterLength }, attrs)) testLayer.setWeights(TEST_DATA[key].weights.map(w => new KerasJS.Tensor(w.data, w.shape))) let t = new KerasJS.Tensor(TEST_DATA[key].input.data, TEST_DATA[key].input.shape, { useWeblas: true }) console.log('%cin', styles.h4, stringifyCondensed(t.tensor)) diff --git a/test/convolutional/Convolution2D.js b/test/convolutional/Convolution2D.js index 308233e..a86ac92 100644 --- a/test/convolutional/Convolution2D.js +++ b/test/convolutional/Convolution2D.js @@ -67,7 +67,7 @@ describe('convolutional layer: Convolution2D', function () { it(title, function () { console.log(`\n%c${title}`, styles.h3) - let testLayer = new layers.Convolution2D(nbFilter, nbRow, nbCol, attrs) + let testLayer = new layers.Convolution2D(Object.assign({ nbFilter, nbRow, nbCol }, attrs)) testLayer.setWeights(TEST_DATA[key].weights.map(w => new KerasJS.Tensor(w.data, w.shape))) let t = new KerasJS.Tensor(TEST_DATA[key].input.data, TEST_DATA[key].input.shape) console.log('%cin', styles.h4, stringifyCondensed(t.tensor)) @@ -101,7 +101,7 @@ describe('convolutional layer: Convolution2D', function () { it(title, function () { console.log(`\n%c${title}`, styles.h3) - let testLayer = new layers.Convolution2D(nbFilter, nbRow, nbCol, attrs) + let testLayer = new layers.Convolution2D(Object.assign({ nbFilter, nbRow, nbCol }, attrs)) testLayer.setWeights(TEST_DATA[key].weights.map(w => new KerasJS.Tensor(w.data, w.shape))) let t = new KerasJS.Tensor(TEST_DATA[key].input.data, TEST_DATA[key].input.shape, { useWeblas: true }) console.log('%cin', styles.h4, stringifyCondensed(t.tensor)) diff --git a/test/convolutional/Convolution3D.js b/test/convolutional/Convolution3D.js index 80a9ad3..6397c52 100644 --- a/test/convolutional/Convolution3D.js +++ b/test/convolutional/Convolution3D.js @@ -57,7 +57,7 @@ describe('convolutional layer: Convolution3D', function () { it(title, function () { console.log(`\n%c${title}`, styles.h3) - let testLayer = new layers.Convolution3D(nbFilter, kernelDim1, kernelDim2, kernelDim3, attrs) + let testLayer = new layers.Convolution3D(Object.assign({ nbFilter, kernelDim1, kernelDim2, kernelDim3 }, attrs)) testLayer.setWeights(TEST_DATA[key].weights.map(w => new KerasJS.Tensor(w.data, w.shape))) let t = new KerasJS.Tensor(TEST_DATA[key].input.data, TEST_DATA[key].input.shape) console.log('%cin', styles.h4, stringifyCondensed(t.tensor)) @@ -91,7 +91,7 @@ describe('convolutional layer: Convolution3D', function () { it(title, function () { console.log(`\n%c${title}`, styles.h3) - let testLayer = new layers.Convolution3D(nbFilter, kernelDim1, kernelDim2, kernelDim3, attrs) + let testLayer = new layers.Convolution3D(Object.assign({ nbFilter, kernelDim1, kernelDim2, kernelDim3 }, attrs)) testLayer.setWeights(TEST_DATA[key].weights.map(w => new KerasJS.Tensor(w.data, w.shape))) let t = new KerasJS.Tensor(TEST_DATA[key].input.data, TEST_DATA[key].input.shape, { useWeblas: true }) console.log('%cin', styles.h4, stringifyCondensed(t.tensor)) diff --git a/test/convolutional/Deconvolution2D.js b/test/convolutional/Deconvolution2D.js index 59c1009..169edaa 100644 --- a/test/convolutional/Deconvolution2D.js +++ b/test/convolutional/Deconvolution2D.js @@ -69,7 +69,7 @@ describe('convolutional layer: Deconvolution2D', function () { it(title, function () { console.log(`\n%c${title}`, styles.h3) - let testLayer = new layers.Deconvolution2D(nbFilter, nbRow, nbCol, outputShape, attrs) + let testLayer = new layers.Deconvolution2D(Object.assign({ nbFilter, nbRow, nbCol, outputShape }, attrs)) testLayer.setWeights(TEST_DATA[key].weights.map(w => new KerasJS.Tensor(w.data, w.shape))) let t = new KerasJS.Tensor(TEST_DATA[key].input.data, TEST_DATA[key].input.shape) console.log('%cin', styles.h4, stringifyCondensed(t.tensor)) @@ -104,7 +104,7 @@ describe('convolutional layer: Deconvolution2D', function () { it(title, function () { console.log(`\n%c${title}`, styles.h3) - let testLayer = new layers.Deconvolution2D(nbFilter, nbRow, nbCol, outputShape, attrs) + let testLayer = new layers.Deconvolution2D(Object.assign({ nbFilter, nbRow, nbCol, outputShape }, attrs)) testLayer.setWeights(TEST_DATA[key].weights.map(w => new KerasJS.Tensor(w.data, w.shape))) let t = new KerasJS.Tensor(TEST_DATA[key].input.data, TEST_DATA[key].input.shape, { useWeblas: true }) console.log('%cin', styles.h4, stringifyCondensed(t.tensor)) diff --git a/test/convolutional/SeparableConvolution2D.js b/test/convolutional/SeparableConvolution2D.js index 17ad4e0..5c1d349 100644 --- a/test/convolutional/SeparableConvolution2D.js +++ b/test/convolutional/SeparableConvolution2D.js @@ -67,7 +67,7 @@ describe('convolutional layer: SeparableConvolution2D', function () { it(title, function () { console.log(`\n%c${title}`, styles.h3) - let testLayer = new layers.SeparableConvolution2D(nbFilter, nbRow, nbCol, attrs) + let testLayer = new layers.SeparableConvolution2D(Object.assign({ nbFilter, nbRow, nbCol }, attrs)) testLayer.setWeights(TEST_DATA[key].weights.map(w => new KerasJS.Tensor(w.data, w.shape))) let t = new KerasJS.Tensor(TEST_DATA[key].input.data, TEST_DATA[key].input.shape) console.log('%cin', styles.h4, stringifyCondensed(t.tensor)) @@ -101,7 +101,7 @@ describe('convolutional layer: SeparableConvolution2D', function () { it(title, function () { console.log(`\n%c${title}`, styles.h3) - let testLayer = new layers.SeparableConvolution2D(nbFilter, nbRow, nbCol, attrs) + let testLayer = new layers.SeparableConvolution2D(Object.assign({ nbFilter, nbRow, nbCol }, attrs)) testLayer.setWeights(TEST_DATA[key].weights.map(w => new KerasJS.Tensor(w.data, w.shape))) let t = new KerasJS.Tensor(TEST_DATA[key].input.data, TEST_DATA[key].input.shape, { useWeblas: true }) console.log('%cin', styles.h4, stringifyCondensed(t.tensor)) diff --git a/test/convolutional/UpSampling1D.js b/test/convolutional/UpSampling1D.js index f099a06..dc43ffd 100644 --- a/test/convolutional/UpSampling1D.js +++ b/test/convolutional/UpSampling1D.js @@ -15,7 +15,7 @@ describe('convolutional layer: UpSampling1D', function () { it(`[convolutional.UpSampling1D.0] length 2 upsampling on 3x5 input`, function () { const key = `convolutional.UpSampling1D.0` console.log(`\n%c[${key}] length 2 upsampling on 3x5 input`, styles.h3) - let testLayer = new layers.UpSampling1D(2) + let testLayer = new layers.UpSampling1D({ length: 2 }) let t = new KerasJS.Tensor(TEST_DATA[key].input.data, TEST_DATA[key].input.shape) console.log('%cin', styles.h4, stringifyCondensed(t.tensor)) const startTime = performance.now() @@ -32,7 +32,7 @@ describe('convolutional layer: UpSampling1D', function () { it(`[convolutional.UpSampling1D.1] length 3 upsampling on 4x4 input`, function () { const key = `convolutional.UpSampling1D.1` console.log(`\n%c[${key}] length 3 upsampling on 4x4 input`, styles.h3) - let testLayer = new layers.UpSampling1D(3) + let testLayer = new layers.UpSampling1D({ length: 3 }) let t = new KerasJS.Tensor(TEST_DATA[key].input.data, TEST_DATA[key].input.shape) console.log('%cin', styles.h4, stringifyCondensed(t.tensor)) const startTime = performance.now() diff --git a/test/convolutional/UpSampling2D.js b/test/convolutional/UpSampling2D.js index 56ebf34..d349328 100644 --- a/test/convolutional/UpSampling2D.js +++ b/test/convolutional/UpSampling2D.js @@ -15,7 +15,7 @@ describe('convolutional layer: UpSampling2D', function () { it(`[convolutional.UpSampling2D.0] size 2x2 upsampling on 3x3x3 input, dimOrdering=tf`, function () { const key = `convolutional.UpSampling2D.0` console.log(`\n%c[${key}] size 2x2 upsampling on 3x3x3 input, dimOrdering=tf`, styles.h3) - let testLayer = new layers.UpSampling2D([2, 2], { dimOrdering: 'tf' }) + let testLayer = new layers.UpSampling2D({ size: [2, 2], dimOrdering: 'tf' }) let t = new KerasJS.Tensor(TEST_DATA[key].input.data, TEST_DATA[key].input.shape) console.log('%cin', styles.h4, stringifyCondensed(t.tensor)) const startTime = performance.now() @@ -32,7 +32,7 @@ describe('convolutional layer: UpSampling2D', function () { it(`[convolutional.UpSampling2D.1] size 2x2 upsampling on 3x3x3 input, dimOrdering=th`, function () { const key = `convolutional.UpSampling2D.1` console.log(`\n%c[${key}] size 2x2 upsampling on 3x3x3 input, dimOrdering=th`, styles.h3) - let testLayer = new layers.UpSampling2D([2, 2], { dimOrdering: 'th' }) + let testLayer = new layers.UpSampling2D({ size: [2, 2], dimOrdering: 'th' }) let t = new KerasJS.Tensor(TEST_DATA[key].input.data, TEST_DATA[key].input.shape) console.log('%cin', styles.h4, stringifyCondensed(t.tensor)) const startTime = performance.now() @@ -49,7 +49,7 @@ describe('convolutional layer: UpSampling2D', function () { it(`[convolutional.UpSampling2D.2] size 3x2 upsampling on 4x2x2 input, dimOrdering=tf`, function () { const key = `convolutional.UpSampling2D.2` console.log(`\n%c[${key}] size 3x2 upsampling on 4x2x2 input, dimOrdering=tf`, styles.h3) - let testLayer = new layers.UpSampling2D([3, 2], { dimOrdering: 'tf' }) + let testLayer = new layers.UpSampling2D({ size: [3, 2], dimOrdering: 'tf' }) let t = new KerasJS.Tensor(TEST_DATA[key].input.data, TEST_DATA[key].input.shape) console.log('%cin', styles.h4, stringifyCondensed(t.tensor)) const startTime = performance.now() @@ -66,7 +66,7 @@ describe('convolutional layer: UpSampling2D', function () { it(`[convolutional.UpSampling2D.3] size 1x3 upsampling on 4x3x2 input, dimOrdering=th`, function () { const key = `convolutional.UpSampling2D.3` console.log(`\n%c[${key}] size 1x3 upsampling on 4x3x2 input, dimOrdering=th`, styles.h3) - let testLayer = new layers.UpSampling2D([1, 3], { dimOrdering: 'th' }) + let testLayer = new layers.UpSampling2D({ size: [1, 3], dimOrdering: 'th' }) let t = new KerasJS.Tensor(TEST_DATA[key].input.data, TEST_DATA[key].input.shape) console.log('%cin', styles.h4, stringifyCondensed(t.tensor)) const startTime = performance.now() diff --git a/test/convolutional/UpSampling3D.js b/test/convolutional/UpSampling3D.js index be4c93e..6f11916 100644 --- a/test/convolutional/UpSampling3D.js +++ b/test/convolutional/UpSampling3D.js @@ -15,7 +15,7 @@ describe('convolutional layer: UpSampling3D', function () { it(`[convolutional.UpSampling3D.0] size 2x2x2 upsampling on 2x2x2x3 input, dimOrdering=tf`, function () { const key = `convolutional.UpSampling3D.0` console.log(`\n%c[${key}] size 2x2x2 upsampling on 2x2x2x3 input, dimOrdering=tf`, styles.h3) - let testLayer = new layers.UpSampling3D([2, 2, 2], { dimOrdering: 'tf' }) + let testLayer = new layers.UpSampling3D({ size: [2, 2, 2], dimOrdering: 'tf' }) let t = new KerasJS.Tensor(TEST_DATA[key].input.data, TEST_DATA[key].input.shape) console.log('%cin', styles.h4, stringifyCondensed(t.tensor)) const startTime = performance.now() @@ -32,7 +32,7 @@ describe('convolutional layer: UpSampling3D', function () { it(`[convolutional.UpSampling3D.1] size 2x2x2 upsampling on 2x2x2x3 input, dimOrdering=th`, function () { const key = `convolutional.UpSampling3D.1` console.log(`\n%c[${key}] size 2x2x2 upsampling on 2x2x2x3 input, dimOrdering=th`, styles.h3) - let testLayer = new layers.UpSampling3D([2, 2, 2], { dimOrdering: 'th' }) + let testLayer = new layers.UpSampling3D({ size: [2, 2, 2], dimOrdering: 'th' }) let t = new KerasJS.Tensor(TEST_DATA[key].input.data, TEST_DATA[key].input.shape) console.log('%cin', styles.h4, stringifyCondensed(t.tensor)) const startTime = performance.now() @@ -49,7 +49,7 @@ describe('convolutional layer: UpSampling3D', function () { it(`[convolutional.UpSampling3D.2] size 1x3x2 upsampling on 2x1x3x2 input, dimOrdering=tf`, function () { const key = `convolutional.UpSampling3D.2` console.log(`\n%c[${key}] size 1x3x2 upsampling on 2x1x3x2 input, dimOrdering=tf`, styles.h3) - let testLayer = new layers.UpSampling3D([1, 3, 2], { dimOrdering: 'tf' }) + let testLayer = new layers.UpSampling3D({ size: [1, 3, 2], dimOrdering: 'tf' }) let t = new KerasJS.Tensor(TEST_DATA[key].input.data, TEST_DATA[key].input.shape) console.log('%cin', styles.h4, stringifyCondensed(t.tensor)) const startTime = performance.now() @@ -66,7 +66,7 @@ describe('convolutional layer: UpSampling3D', function () { it(`[convolutional.UpSampling3D.3] 2x1x2 upsampling on 2x1x3x3 input, dimOrdering=th`, function () { const key = `convolutional.UpSampling3D.3` console.log(`\n%c[${key}] 2x1x2 upsampling on 2x1x3x3 input, dimOrdering=th`, styles.h3) - let testLayer = new layers.UpSampling3D([2, 1, 2], { dimOrdering: 'th' }) + let testLayer = new layers.UpSampling3D({ size: [2, 1, 2], dimOrdering: 'th' }) let t = new KerasJS.Tensor(TEST_DATA[key].input.data, TEST_DATA[key].input.shape) console.log('%cin', styles.h4, stringifyCondensed(t.tensor)) const startTime = performance.now() diff --git a/test/convolutional/ZeroPadding1D.js b/test/convolutional/ZeroPadding1D.js index 09669ab..4a6f2a0 100644 --- a/test/convolutional/ZeroPadding1D.js +++ b/test/convolutional/ZeroPadding1D.js @@ -15,7 +15,7 @@ describe('convolutional layer: ZeroPadding1D', function () { it(`[convolutional.ZeroPadding1D.0] padding 1 on 3x5 input`, function () { const key = `convolutional.ZeroPadding1D.0` console.log(`\n%c[${key}] padding 1 on 3x5 input`, styles.h3) - let testLayer = new layers.ZeroPadding1D(1) + let testLayer = new layers.ZeroPadding1D({ padding: 1 }) let t = new KerasJS.Tensor(TEST_DATA[key].input.data, TEST_DATA[key].input.shape) console.log('%cin', styles.h4, stringifyCondensed(t.tensor)) const startTime = performance.now() @@ -32,7 +32,7 @@ describe('convolutional layer: ZeroPadding1D', function () { it(`[convolutional.ZeroPadding1D.1] padding 3 on 4x4 input`, function () { const key = `convolutional.ZeroPadding1D.1` console.log(`\n%c[${key}] padding 3 on 4x4 input`, styles.h3) - let testLayer = new layers.ZeroPadding1D(3) + let testLayer = new layers.ZeroPadding1D({ padding: 3 }) let t = new KerasJS.Tensor(TEST_DATA[key].input.data, TEST_DATA[key].input.shape) console.log('%cin', styles.h4, stringifyCondensed(t.tensor)) const startTime = performance.now() diff --git a/test/convolutional/ZeroPadding2D.js b/test/convolutional/ZeroPadding2D.js index 98a5fb0..ca8f397 100644 --- a/test/convolutional/ZeroPadding2D.js +++ b/test/convolutional/ZeroPadding2D.js @@ -15,7 +15,7 @@ describe('convolutional layer: ZeroPadding2D', function () { it(`[convolutional.ZeroPadding2D.0] padding 1,1 on 3x5x2 input, dimOrdering=tf`, function () { const key = `convolutional.ZeroPadding2D.0` console.log(`\n%c[${key}] padding 1,1 on 3x5x2 input, dimOrdering=tf`, styles.h3) - let testLayer = new layers.ZeroPadding2D([1, 1], { dimOrdering: 'tf' }) + let testLayer = new layers.ZeroPadding2D({ padding: [1, 1], dimOrdering: 'tf' }) let t = new KerasJS.Tensor(TEST_DATA[key].input.data, TEST_DATA[key].input.shape) console.log('%cin', styles.h4, stringifyCondensed(t.tensor)) const startTime = performance.now() @@ -32,7 +32,7 @@ describe('convolutional layer: ZeroPadding2D', function () { it(`[convolutional.ZeroPadding2D.1] padding 1,1 on 3x5x2 input, dimOrdering=th`, function () { const key = `convolutional.ZeroPadding2D.1` console.log(`\n%c[${key}] padding 1,1 on 3x5x2 input, dimOrdering=th`, styles.h3) - let testLayer = new layers.ZeroPadding2D([1, 1], { dimOrdering: 'th' }) + let testLayer = new layers.ZeroPadding2D({ padding: [1, 1], dimOrdering: 'th' }) let t = new KerasJS.Tensor(TEST_DATA[key].input.data, TEST_DATA[key].input.shape) console.log('%cin', styles.h4, stringifyCondensed(t.tensor)) const startTime = performance.now() @@ -49,7 +49,7 @@ describe('convolutional layer: ZeroPadding2D', function () { it(`[convolutional.ZeroPadding2D.2] padding 3,2 on 2x6x4 input, dimOrdering=tf`, function () { const key = `convolutional.ZeroPadding2D.2` console.log(`\n%c[${key}] padding 3,2 on 2x6x4 input, dimOrdering=tf`, styles.h3) - let testLayer = new layers.ZeroPadding2D([3, 2], { dimOrdering: 'tf' }) + let testLayer = new layers.ZeroPadding2D({ padding: [3, 2], dimOrdering: 'tf' }) let t = new KerasJS.Tensor(TEST_DATA[key].input.data, TEST_DATA[key].input.shape) console.log('%cin', styles.h4, stringifyCondensed(t.tensor)) const startTime = performance.now() @@ -66,7 +66,7 @@ describe('convolutional layer: ZeroPadding2D', function () { it(`[convolutional.ZeroPadding2D.3] padding 3,2 on 2x6x4 input, dimOrdering=th`, function () { const key = `convolutional.ZeroPadding2D.3` console.log(`\n%c[${key}] padding 3,2 on 2x6x4 input, dimOrdering=th`, styles.h3) - let testLayer = new layers.ZeroPadding2D([3, 2], { dimOrdering: 'th' }) + let testLayer = new layers.ZeroPadding2D({ padding: [3, 2], dimOrdering: 'th' }) let t = new KerasJS.Tensor(TEST_DATA[key].input.data, TEST_DATA[key].input.shape) console.log('%cin', styles.h4, stringifyCondensed(t.tensor)) const startTime = performance.now() diff --git a/test/convolutional/ZeroPadding3D.js b/test/convolutional/ZeroPadding3D.js index 03e656e..b83a233 100644 --- a/test/convolutional/ZeroPadding3D.js +++ b/test/convolutional/ZeroPadding3D.js @@ -15,7 +15,7 @@ describe('convolutional layer: ZeroPadding3D', function () { it(`[convolutional.ZeroPadding3D.0] padding 1,1,1 on 3x5x2x2 input, dimOrdering=tf`, function () { const key = `convolutional.ZeroPadding3D.0` console.log(`\n%c[${key}] padding 1,1,1 on 3x5x2x2 input, dimOrdering=tf`, styles.h3) - let testLayer = new layers.ZeroPadding3D([1, 1, 1], { dimOrdering: 'tf' }) + let testLayer = new layers.ZeroPadding3D({ padding: [1, 1, 1], dimOrdering: 'tf' }) let t = new KerasJS.Tensor(TEST_DATA[key].input.data, TEST_DATA[key].input.shape) console.log('%cin', styles.h4, stringifyCondensed(t.tensor)) const startTime = performance.now() @@ -32,7 +32,7 @@ describe('convolutional layer: ZeroPadding3D', function () { it(`[convolutional.ZeroPadding3D.1] padding 1,1,1 on 3x5x2x2 input, dimOrdering=th`, function () { const key = `convolutional.ZeroPadding3D.1` console.log(`\n%c[${key}] padding 1,1,1 on 3x5x2x2 input, dimOrdering=th`, styles.h3) - let testLayer = new layers.ZeroPadding3D([1, 1, 1], { dimOrdering: 'th' }) + let testLayer = new layers.ZeroPadding3D({ padding: [1, 1, 1], dimOrdering: 'th' }) let t = new KerasJS.Tensor(TEST_DATA[key].input.data, TEST_DATA[key].input.shape) console.log('%cin', styles.h4, stringifyCondensed(t.tensor)) const startTime = performance.now() @@ -49,7 +49,7 @@ describe('convolutional layer: ZeroPadding3D', function () { it(`[convolutional.ZeroPadding3D.2] padding 3,2,2 on 3x2x1x4 input, dimOrdering=tf`, function () { const key = `convolutional.ZeroPadding3D.2` console.log(`\n%c[${key}] padding 3,2,2 on 3x2x1x4 input, dimOrdering=tf`, styles.h3) - let testLayer = new layers.ZeroPadding3D([3, 2, 2], { dimOrdering: 'tf' }) + let testLayer = new layers.ZeroPadding3D({ padding: [3, 2, 2], dimOrdering: 'tf' }) let t = new KerasJS.Tensor(TEST_DATA[key].input.data, TEST_DATA[key].input.shape) console.log('%cin', styles.h4, stringifyCondensed(t.tensor)) const startTime = performance.now() @@ -66,7 +66,7 @@ describe('convolutional layer: ZeroPadding3D', function () { it(`[convolutional.ZeroPadding3D.3] padding 3,2,2 on 3x2x1x4 input, dimOrdering=th`, function () { const key = `convolutional.ZeroPadding3D.3` console.log(`\n%c[${key}] padding 3,2,2 on 3x2x1x4 input, dimOrdering=th`, styles.h3) - let testLayer = new layers.ZeroPadding3D([3, 2, 2], { dimOrdering: 'th' }) + let testLayer = new layers.ZeroPadding3D({ padding: [3, 2, 2], dimOrdering: 'th' }) let t = new KerasJS.Tensor(TEST_DATA[key].input.data, TEST_DATA[key].input.shape) console.log('%cin', styles.h4, stringifyCondensed(t.tensor)) const startTime = performance.now() diff --git a/test/core/Activation.js b/test/core/Activation.js index ba5e477..61f6fa1 100644 --- a/test/core/Activation.js +++ b/test/core/Activation.js @@ -15,12 +15,12 @@ describe('core layer: Activation', function () { it('[core.Activation.0] should produce expected values for tanh activation following Dense layer', function () { const key = 'core.Activation.0' console.log(`\n%c[${key}] test 1 (tanh)`, styles.h3) - let testLayer1 = new layers.Dense(2) + let testLayer1 = new layers.Dense({ outputDim: 2 }) testLayer1.setWeights(TEST_DATA[key].weights.map(w => new KerasJS.Tensor(w.data, w.shape))) let t = new KerasJS.Tensor(TEST_DATA[key].input.data, TEST_DATA[key].input.shape) t = testLayer1.call(t) console.log('%cin', styles.h4, stringifyCondensed(t.tensor)) - let testLayer2 = new layers.Activation('tanh') + let testLayer2 = new layers.Activation({ activation: 'tanh' }) const startTime = performance.now() t = testLayer2.call(t) const endTime = performance.now() @@ -35,12 +35,12 @@ describe('core layer: Activation', function () { it('[core.Activation.1] should produce expected values for hardSigmoid activation following Dense layer', function () { const key = 'core.Activation.1' console.log(`\n%c[${key}] test 2 (hardSigmoid)`, styles.h3) - let testLayer1 = new layers.Dense(2) + let testLayer1 = new layers.Dense({ outputDim: 2 }) testLayer1.setWeights(TEST_DATA[key].weights.map(w => new KerasJS.Tensor(w.data, w.shape))) let t = new KerasJS.Tensor(TEST_DATA[key].input.data, TEST_DATA[key].input.shape) t = testLayer1.call(t) console.log('%cin', styles.h4, stringifyCondensed(t.tensor)) - let testLayer2 = new layers.Activation('hardSigmoid') + let testLayer2 = new layers.Activation({ activation: 'hardSigmoid' }) const startTime = performance.now() t = testLayer2.call(t) const endTime = performance.now() diff --git a/test/core/Dense.js b/test/core/Dense.js index 46a1923..b5e39e8 100644 --- a/test/core/Dense.js +++ b/test/core/Dense.js @@ -24,7 +24,7 @@ describe('core layer: Dense', function () { it('[core.Dense.0] [CPU] should produce expected values', function () { const key = 'core.Dense.0' console.log(`\n%c[${key}] [CPU] test 1`, styles.h3) - let testLayer = new layers.Dense(2) + let testLayer = new layers.Dense({ outputDim: 2 }) testLayer.setWeights(TEST_DATA[key].weights.map(w => new KerasJS.Tensor(w.data, w.shape))) let t = new KerasJS.Tensor(TEST_DATA[key].input.data, TEST_DATA[key].input.shape) console.log('%cin', styles.h4, stringifyCondensed(t.tensor)) @@ -42,7 +42,7 @@ describe('core layer: Dense', function () { it('[core.Dense.1] [CPU] should produce expected values, with sigmoid activation function', function () { const key = 'core.Dense.1' console.log(`\n%c[${key}] [CPU] test 2 (with sigmoid activation)`, styles.h3) - let testLayer = new layers.Dense(2, { activation: 'sigmoid' }) + let testLayer = new layers.Dense({ outputDim: 2, activation: 'sigmoid' }) testLayer.setWeights(TEST_DATA[key].weights.map(w => new KerasJS.Tensor(w.data, w.shape))) let t = new KerasJS.Tensor(TEST_DATA[key].input.data, TEST_DATA[key].input.shape) console.log('%cin', styles.h4, stringifyCondensed(t.tensor)) @@ -60,7 +60,7 @@ describe('core layer: Dense', function () { it('[core.Dense.2] [CPU] should produce expected values, with softplus activation function and no bias', function () { const key = 'core.Dense.2' console.log(`\n%c[${key}] [CPU] test 3 (with softplus activation and no bias)`, styles.h3) - let testLayer = new layers.Dense(2, { activation: 'softplus', bias: false }) + let testLayer = new layers.Dense({ outputDim: 2, activation: 'softplus', bias: false }) testLayer.setWeights(TEST_DATA[key].weights.map(w => new KerasJS.Tensor(w.data, w.shape))) let t = new KerasJS.Tensor(TEST_DATA[key].input.data, TEST_DATA[key].input.shape) console.log('%cin', styles.h4, stringifyCondensed(t.tensor)) @@ -88,7 +88,7 @@ describe('core layer: Dense', function () { it('[core.Dense.3] [GPU] should produce expected values', function () { const key = 'core.Dense.3' console.log(`\n%c[${key}] [GPU] test 1`, styles.h3) - let testLayer = new layers.Dense(2) + let testLayer = new layers.Dense({ outputDim: 2 }) testLayer.setWeights(TEST_DATA[key].weights.map(w => new KerasJS.Tensor(w.data, w.shape))) let t = new KerasJS.Tensor(TEST_DATA[key].input.data, TEST_DATA[key].input.shape, { useWeblas: true }) console.log('%cin', styles.h4, stringifyCondensed(t.tensor)) @@ -106,7 +106,7 @@ describe('core layer: Dense', function () { it('[core.Dense.4] [GPU] should produce expected values, with sigmoid activation function', function () { const key = 'core.Dense.4' console.log(`\n%c[${key}] [GPU] test 2 (with sigmoid activation)`, styles.h3) - let testLayer = new layers.Dense(2, { activation: 'sigmoid' }) + let testLayer = new layers.Dense({ outputDim: 2, activation: 'sigmoid' }) testLayer.setWeights(TEST_DATA[key].weights.map(w => new KerasJS.Tensor(w.data, w.shape))) let t = new KerasJS.Tensor(TEST_DATA[key].input.data, TEST_DATA[key].input.shape, { useWeblas: true }) console.log('%cin', styles.h4, stringifyCondensed(t.tensor)) @@ -124,7 +124,7 @@ describe('core layer: Dense', function () { it('[core.Dense.5] [GPU] should produce expected values, with softplus activation function and no bias', function () { const key = 'core.Dense.5' console.log(`\n%c[${key}] [GPU] test 3 (with softplus activation and no bias)`, styles.h3) - let testLayer = new layers.Dense(2, { activation: 'softplus', bias: false }) + let testLayer = new layers.Dense({ outputDim: 2, activation: 'softplus', bias: false }) testLayer.setWeights(TEST_DATA[key].weights.map(w => new KerasJS.Tensor(w.data, w.shape))) let t = new KerasJS.Tensor(TEST_DATA[key].input.data, TEST_DATA[key].input.shape, { useWeblas: true }) console.log('%cin', styles.h4, stringifyCondensed(t.tensor)) diff --git a/test/core/Dropout.js b/test/core/Dropout.js index b24d7cf..ecd9f0a 100644 --- a/test/core/Dropout.js +++ b/test/core/Dropout.js @@ -15,12 +15,12 @@ describe('core layer: Dropout', function () { it('[core.Dropout.0] should just pass through tensor during test time', function () { const key = 'core.Dropout.0' console.log(`\n%c[${key}] should pass through`, styles.h3) - let testLayer1 = new layers.Dense(2) + let testLayer1 = new layers.Dense({ outputDim: 2 }) testLayer1.setWeights(TEST_DATA[key].weights.map(w => new KerasJS.Tensor(w.data, w.shape))) let t = new KerasJS.Tensor(TEST_DATA[key].input.data, TEST_DATA[key].input.shape) t = testLayer1.call(t) console.log('%cin', styles.h4, stringifyCondensed(t.tensor)) - let testLayer2 = new layers.Dropout(0.5) + let testLayer2 = new layers.Dropout({ p: 0.5 }) const startTime = performance.now() t = testLayer2.call(t) const endTime = performance.now() diff --git a/test/core/MaxoutDense.js b/test/core/MaxoutDense.js index d84e1e6..9dd49ca 100644 --- a/test/core/MaxoutDense.js +++ b/test/core/MaxoutDense.js @@ -15,7 +15,7 @@ describe('core layer: MaxoutDense', function () { it('[core.MaxoutDense.0] should produce expected values, nbFeature=4, bias=true', function () { const key = 'core.MaxoutDense.0' console.log(`\n%c[${key}] nbFeature=4, bias=true`, styles.h3) - let testLayer = new layers.MaxoutDense(3) + let testLayer = new layers.MaxoutDense({ outputDim: 3 }) testLayer.setWeights(TEST_DATA[key].weights.map(w => new KerasJS.Tensor(w.data, w.shape))) let t = new KerasJS.Tensor(TEST_DATA[key].input.data, TEST_DATA[key].input.shape) console.log('%cin', styles.h4, stringifyCondensed(t.tensor)) @@ -33,7 +33,7 @@ describe('core layer: MaxoutDense', function () { it('[core.MaxoutDense.1] should produce expected values, nbFeature=7, bias=false', function () { const key = 'core.MaxoutDense.1' console.log(`\n%c[${key}] nbFeature=7, bias=false`, styles.h3) - let testLayer = new layers.MaxoutDense(3, { bias: false }) + let testLayer = new layers.MaxoutDense({ outputDim: 3, bias: false }) testLayer.setWeights(TEST_DATA[key].weights.map(w => new KerasJS.Tensor(w.data, w.shape))) let t = new KerasJS.Tensor(TEST_DATA[key].input.data, TEST_DATA[key].input.shape) console.log('%cin', styles.h4, stringifyCondensed(t.tensor)) diff --git a/test/core/Merge.js b/test/core/Merge.js index e0eaa99..ee55a72 100644 --- a/test/core/Merge.js +++ b/test/core/Merge.js @@ -24,8 +24,8 @@ describe('core layer: Merge', function () { it('[core.Merge.0] should produce expected values in sum mode', function () { const key = 'core.Merge.0' console.log(`\n%c[${key}] mode: sum`, styles.h3) - let testLayer1a = new layers.Dense(2) - let testLayer1b = new layers.Dense(2) + let testLayer1a = new layers.Dense({ outputDim: 2 }) + let testLayer1b = new layers.Dense({ outputDim: 2 }) let testLayer2 = new layers.Merge({ mode: 'sum' }) testLayer1a.setWeights(TEST_DATA[key].weights.slice(0, 2).map(w => new KerasJS.Tensor(w.data, w.shape))) testLayer1b.setWeights(TEST_DATA[key].weights.slice(2, 4).map(w => new KerasJS.Tensor(w.data, w.shape))) @@ -59,8 +59,8 @@ describe('core layer: Merge', function () { it('[core.Merge.1] should produce expected values in mul mode', function () { const key = 'core.Merge.1' console.log(`\n%c[${key}] mode: mul`, styles.h3) - let testLayer1a = new layers.Dense(2) - let testLayer1b = new layers.Dense(2) + let testLayer1a = new layers.Dense({ outputDim: 2 }) + let testLayer1b = new layers.Dense({ outputDim: 2 }) let testLayer2 = new layers.Merge({ mode: 'mul' }) testLayer1a.setWeights(TEST_DATA[key].weights.slice(0, 2).map(w => new KerasJS.Tensor(w.data, w.shape))) testLayer1b.setWeights(TEST_DATA[key].weights.slice(2, 4).map(w => new KerasJS.Tensor(w.data, w.shape))) @@ -94,8 +94,8 @@ describe('core layer: Merge', function () { it('[core.Merge.2] should produce expected values in ave mode', function () { const key = 'core.Merge.2' console.log(`\n%c[${key}] mode: ave`, styles.h3) - let testLayer1a = new layers.Dense(2) - let testLayer1b = new layers.Dense(2) + let testLayer1a = new layers.Dense({ outputDim: 2 }) + let testLayer1b = new layers.Dense({ outputDim: 2 }) let testLayer2 = new layers.Merge({ mode: 'ave' }) testLayer1a.setWeights(TEST_DATA[key].weights.slice(0, 2).map(w => new KerasJS.Tensor(w.data, w.shape))) testLayer1b.setWeights(TEST_DATA[key].weights.slice(2, 4).map(w => new KerasJS.Tensor(w.data, w.shape))) @@ -129,8 +129,8 @@ describe('core layer: Merge', function () { it('[core.Merge.3] should produce expected values in max mode', function () { const key = 'core.Merge.3' console.log(`\n%c[${key}] mode: max`, styles.h3) - let testLayer1a = new layers.Dense(2) - let testLayer1b = new layers.Dense(2) + let testLayer1a = new layers.Dense({ outputDim: 2 }) + let testLayer1b = new layers.Dense({ outputDim: 2 }) let testLayer2 = new layers.Merge({ mode: 'max' }) testLayer1a.setWeights(TEST_DATA[key].weights.slice(0, 2).map(w => new KerasJS.Tensor(w.data, w.shape))) testLayer1b.setWeights(TEST_DATA[key].weights.slice(2, 4).map(w => new KerasJS.Tensor(w.data, w.shape))) @@ -164,8 +164,8 @@ describe('core layer: Merge', function () { it('[core.Merge.4] should produce expected values in concat mode (1D)', function () { const key = 'core.Merge.4' console.log(`\n%c[${key}] mode: concat (1D)`, styles.h3) - let testLayer1a = new layers.Dense(2) - let testLayer1b = new layers.Dense(2) + let testLayer1a = new layers.Dense({ outputDim: 2 }) + let testLayer1b = new layers.Dense({ outputDim: 2 }) let testLayer2 = new layers.Merge({ mode: 'concat', concatAxis: -1 }) testLayer1a.setWeights(TEST_DATA[key].weights.slice(0, 2).map(w => new KerasJS.Tensor(w.data, w.shape))) testLayer1b.setWeights(TEST_DATA[key].weights.slice(2, 4).map(w => new KerasJS.Tensor(w.data, w.shape))) @@ -189,10 +189,10 @@ describe('core layer: Merge', function () { it('[core.Merge.5] should produce expected values in concat mode (2D, concatAxis=-1)', function () { const key = 'core.Merge.5' console.log(`\n%c[${key}] mode: concat (2D, concatAxis=-1)`, styles.h3) - let testLayer1a = new layers.Dense(2) - let testLayer2a = new layers.RepeatVector(3) - let testLayer1b = new layers.Dense(2) - let testLayer2b = new layers.RepeatVector(3) + let testLayer1a = new layers.Dense({ outputDim: 2 }) + let testLayer2a = new layers.RepeatVector({ n: 3 }) + let testLayer1b = new layers.Dense({ outputDim: 2 }) + let testLayer2b = new layers.RepeatVector({ n: 3 }) let testLayer3 = new layers.Merge({ mode: 'concat', concatAxis: -1 }) testLayer1a.setWeights(TEST_DATA[key].weights.slice(0, 2).map(w => new KerasJS.Tensor(w.data, w.shape))) testLayer1b.setWeights(TEST_DATA[key].weights.slice(2, 4).map(w => new KerasJS.Tensor(w.data, w.shape))) @@ -218,10 +218,10 @@ describe('core layer: Merge', function () { it('[core.Merge.6] should produce expected values in concat mode (2D, concatAxis=-2)', function () { const key = 'core.Merge.6' console.log(`\n%c[${key}] mode: concat (2D, concatAxis=-2)`, styles.h3) - let testLayer1a = new layers.Dense(2) - let testLayer2a = new layers.RepeatVector(3) - let testLayer1b = new layers.Dense(2) - let testLayer2b = new layers.RepeatVector(3) + let testLayer1a = new layers.Dense({ outputDim: 2 }) + let testLayer2a = new layers.RepeatVector({ n: 3 }) + let testLayer1b = new layers.Dense({ outputDim: 2 }) + let testLayer2b = new layers.RepeatVector({ n: 3 }) let testLayer3 = new layers.Merge({ mode: 'concat', concatAxis: -2 }) testLayer1a.setWeights(TEST_DATA[key].weights.slice(0, 2).map(w => new KerasJS.Tensor(w.data, w.shape))) testLayer1b.setWeights(TEST_DATA[key].weights.slice(2, 4).map(w => new KerasJS.Tensor(w.data, w.shape))) @@ -247,10 +247,10 @@ describe('core layer: Merge', function () { it('[core.Merge.7] should produce expected values in concat mode (2D, concatAxis=1)', function () { const key = 'core.Merge.7' console.log(`\n%c[${key}] mode: concat (2D, concatAxis=1)`, styles.h3) - let testLayer1a = new layers.Dense(2) - let testLayer2a = new layers.RepeatVector(3) - let testLayer1b = new layers.Dense(2) - let testLayer2b = new layers.RepeatVector(3) + let testLayer1a = new layers.Dense({ outputDim: 2 }) + let testLayer2a = new layers.RepeatVector({ n: 3 }) + let testLayer1b = new layers.Dense({ outputDim: 2 }) + let testLayer2b = new layers.RepeatVector({ n: 3 }) let testLayer3 = new layers.Merge({ mode: 'concat', concatAxis: 1 }) testLayer1a.setWeights(TEST_DATA[key].weights.slice(0, 2).map(w => new KerasJS.Tensor(w.data, w.shape))) testLayer1b.setWeights(TEST_DATA[key].weights.slice(2, 4).map(w => new KerasJS.Tensor(w.data, w.shape))) @@ -276,10 +276,10 @@ describe('core layer: Merge', function () { it('[core.Merge.8] should produce expected values in concat mode (2D, concatAxis=2)', function () { const key = 'core.Merge.8' console.log(`\n%c[${key}] mode: concat (2D, concatAxis=2)`, styles.h3) - let testLayer1a = new layers.Dense(2) - let testLayer2a = new layers.RepeatVector(3) - let testLayer1b = new layers.Dense(2) - let testLayer2b = new layers.RepeatVector(3) + let testLayer1a = new layers.Dense({ outputDim: 2 }) + let testLayer2a = new layers.RepeatVector({ n: 3 }) + let testLayer1b = new layers.Dense({ outputDim: 2 }) + let testLayer2b = new layers.RepeatVector({ n: 3 }) let testLayer3 = new layers.Merge({ mode: 'concat', concatAxis: 2 }) testLayer1a.setWeights(TEST_DATA[key].weights.slice(0, 2).map(w => new KerasJS.Tensor(w.data, w.shape))) testLayer1b.setWeights(TEST_DATA[key].weights.slice(2, 4).map(w => new KerasJS.Tensor(w.data, w.shape))) @@ -315,10 +315,10 @@ describe('core layer: Merge', function () { it('[core.Merge.9] should produce expected values in dot mode (2D x 2D, dotAxes=1)', function () { const key = 'core.Merge.9' console.log(`\n%c[${key}] mode: dot (2D x 2D, dotAxes=1)`, styles.h3) - let testLayer1a = new layers.Dense(2) - let testLayer2a = new layers.RepeatVector(3) - let testLayer1b = new layers.Dense(2) - let testLayer2b = new layers.RepeatVector(3) + let testLayer1a = new layers.Dense({ outputDim: 2 }) + let testLayer2a = new layers.RepeatVector({ n: 3 }) + let testLayer1b = new layers.Dense({ outputDim: 2 }) + let testLayer2b = new layers.RepeatVector({ n: 3 }) let testLayer3 = new layers.Merge({ mode: 'dot', dotAxes: 1 }) testLayer1a.setWeights(TEST_DATA[key].weights.slice(0, 2).map(w => new KerasJS.Tensor(w.data, w.shape))) testLayer1b.setWeights(TEST_DATA[key].weights.slice(2, 4).map(w => new KerasJS.Tensor(w.data, w.shape))) @@ -344,10 +344,10 @@ describe('core layer: Merge', function () { it('[core.Merge.10] should produce expected values in dot mode (2D x 2D, dotAxes=2)', function () { const key = 'core.Merge.10' console.log(`\n%c[${key}] mode: dot (2D x 2D, dotAxes=2)`, styles.h3) - let testLayer1a = new layers.Dense(2) - let testLayer2a = new layers.RepeatVector(3) - let testLayer1b = new layers.Dense(2) - let testLayer2b = new layers.RepeatVector(3) + let testLayer1a = new layers.Dense({ outputDim: 2 }) + let testLayer2a = new layers.RepeatVector({ n: 3 }) + let testLayer1b = new layers.Dense({ outputDim: 2 }) + let testLayer2b = new layers.RepeatVector({ n: 3 }) let testLayer3 = new layers.Merge({ mode: 'dot', dotAxes: 2 }) testLayer1a.setWeights(TEST_DATA[key].weights.slice(0, 2).map(w => new KerasJS.Tensor(w.data, w.shape))) testLayer1b.setWeights(TEST_DATA[key].weights.slice(2, 4).map(w => new KerasJS.Tensor(w.data, w.shape))) @@ -383,10 +383,10 @@ describe('core layer: Merge', function () { it('[core.Merge.11] should produce expected values in cos mode (2D x 2D, dotAxes=1)', function () { const key = 'core.Merge.11' console.log(`\n%c[${key}] mode: cos (2D x 2D, dotAxes=1)`, styles.h3) - let testLayer1a = new layers.Dense(2) - let testLayer2a = new layers.RepeatVector(3) - let testLayer1b = new layers.Dense(2) - let testLayer2b = new layers.RepeatVector(3) + let testLayer1a = new layers.Dense({ outputDim: 2 }) + let testLayer2a = new layers.RepeatVector({ n: 3 }) + let testLayer1b = new layers.Dense({ outputDim: 2 }) + let testLayer2b = new layers.RepeatVector({ n: 3 }) let testLayer3 = new layers.Merge({ mode: 'cos', dotAxes: 1 }) testLayer1a.setWeights(TEST_DATA[key].weights.slice(0, 2).map(w => new KerasJS.Tensor(w.data, w.shape))) testLayer1b.setWeights(TEST_DATA[key].weights.slice(2, 4).map(w => new KerasJS.Tensor(w.data, w.shape))) @@ -412,10 +412,10 @@ describe('core layer: Merge', function () { it('[core.Merge.12] should produce expected values in cos mode (2D x 2D, dotAxes=2)', function () { const key = 'core.Merge.12' console.log(`\n%c[${key}] mode: cos (2D x 2D, dotAxes=2)`, styles.h3) - let testLayer1a = new layers.Dense(2) - let testLayer2a = new layers.RepeatVector(3) - let testLayer1b = new layers.Dense(2) - let testLayer2b = new layers.RepeatVector(3) + let testLayer1a = new layers.Dense({ outputDim: 2 }) + let testLayer2a = new layers.RepeatVector({ n: 3 }) + let testLayer1b = new layers.Dense({ outputDim: 2 }) + let testLayer2b = new layers.RepeatVector({ n: 3 }) let testLayer3 = new layers.Merge({ mode: 'cos', dotAxes: 2 }) testLayer1a.setWeights(TEST_DATA[key].weights.slice(0, 2).map(w => new KerasJS.Tensor(w.data, w.shape))) testLayer1b.setWeights(TEST_DATA[key].weights.slice(2, 4).map(w => new KerasJS.Tensor(w.data, w.shape))) diff --git a/test/core/Permute.js b/test/core/Permute.js index fa8401c..905b556 100644 --- a/test/core/Permute.js +++ b/test/core/Permute.js @@ -15,7 +15,7 @@ describe('core layer: Permute', function () { it('[core.Permute.0] should be able to go from shape [3, 2] -> [2, 3]', function () { const key = 'core.Permute.0' console.log(`\n%c[${key}] shape [3, 2] -> [2, 3]`, styles.h3) - let testLayer = new layers.Permute([2, 1]) + let testLayer = new layers.Permute({ dims: [2, 1] }) let t = new KerasJS.Tensor(TEST_DATA[key].input.data, TEST_DATA[key].input.shape) console.log('%cin', styles.h4, stringifyCondensed(t.tensor)) const startTime = performance.now() @@ -32,7 +32,7 @@ describe('core layer: Permute', function () { it('[core.Permute.1] should be able to go from shape [2, 3, 4] -> [4, 3, 2]', function () { const key = 'core.Permute.1' console.log(`\n%c[${key}] shape [2, 3, 4] -> [4, 3, 2]`, styles.h3) - let testLayer = new layers.Permute([3, 2, 1]) + let testLayer = new layers.Permute({ dims: [3, 2, 1] }) let t = new KerasJS.Tensor(TEST_DATA[key].input.data, TEST_DATA[key].input.shape) console.log('%cin', styles.h4, stringifyCondensed(t.tensor)) const startTime = performance.now() diff --git a/test/core/RepeatVector.js b/test/core/RepeatVector.js index b4a53c3..1d8cf90 100644 --- a/test/core/RepeatVector.js +++ b/test/core/RepeatVector.js @@ -15,7 +15,7 @@ describe('core layer: RepeatVector', function () { it('[core.RepeatVector.0] should be able to go from shape [6] -> [7, 6]', function () { const key = 'core.RepeatVector.0' console.log(`\n%c[${key}] repeat vector, shape [6] -> [7, 6]`, styles.h3) - let testLayer = new layers.RepeatVector(7) + let testLayer = new layers.RepeatVector({ n: 7 }) let t = new KerasJS.Tensor(TEST_DATA[key].input.data, TEST_DATA[key].input.shape) console.log('%cin', styles.h4, stringifyCondensed(t.tensor)) const startTime = performance.now() diff --git a/test/core/Reshape.js b/test/core/Reshape.js index fa09cbb..9d7f771 100644 --- a/test/core/Reshape.js +++ b/test/core/Reshape.js @@ -15,7 +15,7 @@ describe('core layer: Reshape', function () { it('[core.Reshape.0] should be able to go from shape [6] -> [2, 3]', function () { const key = 'core.Reshape.0' console.log(`\n%c[${key}] shape [6] -> [2, 3]`, styles.h3) - let testLayer = new layers.Reshape([2, 3]) + let testLayer = new layers.Reshape({ shape: [2, 3] }) let t = new KerasJS.Tensor(TEST_DATA[key].input.data, TEST_DATA[key].input.shape) console.log('%cin', styles.h4, stringifyCondensed(t.tensor)) const startTime = performance.now() @@ -32,7 +32,7 @@ describe('core layer: Reshape', function () { it('[core.Reshape.1] should be able to go from shape [3, 2] -> [6]', function () { const key = 'core.Reshape.1' console.log(`\n%c[${key}] shape [3, 2] -> [6]`, styles.h3) - let testLayer = new layers.Reshape([6]) + let testLayer = new layers.Reshape({ shape: [6] }) let t = new KerasJS.Tensor(TEST_DATA[key].input.data, TEST_DATA[key].input.shape) console.log('%cin', styles.h4, stringifyCondensed(t.tensor)) const startTime = performance.now() @@ -49,7 +49,7 @@ describe('core layer: Reshape', function () { it('[core.Reshape.2] should be able to go from shape [3, 2, 2] -> [4, 3]', function () { const key = 'core.Reshape.2' console.log(`\n%c[${key}] shape [3, 2, 2] -> [4, 3]`, styles.h3) - let testLayer = new layers.Reshape([4, 3]) + let testLayer = new layers.Reshape({ shape: [4, 3] }) let t = new KerasJS.Tensor(TEST_DATA[key].input.data, TEST_DATA[key].input.shape) console.log('%cin', styles.h4, stringifyCondensed(t.tensor)) const startTime = performance.now()