Tensorflow.js tf.conv2d() Function

31 May, 2021
Tensorflow.js is a javascript library developed by Google to run and train machine learning models in the browser or in Node.js. 
The tf.conv2d() function is used to compute 2d convolutions over the given input. In a deep neural network, we use this convolution layer which creates a convolution kernel which when applied to the input layers produces a tensor of outputs. 
Syntax:
tf.conv2d (x, filter, strides, pad, dataFormat?, 
        dilations?, dimRoundingMode?) 
Parameters:
x: A tensor of rank 3 and rank 4 with shape [batch, height, width, inChannels] is given. It can be a 3D tensor, 4D tensor or a typed array.
filter: Filter is of rank 4 with shape parameters [filterHeight, filterWidth, inDepth, outDepth] is passed. It needs to be a 4D tensor, nested array or a typed array.
strides ([number, number]|number): Strides of the convolution : [strideHeight, strideWidth].
pad: The type of padding algorithm.Same: Regardless of filter size, output will be of same size as input.valid: Output will be smaller than input if filter is larger than 1×1.It can also be a number or conv_util.ExplicitPadding.
Same: Regardless of filter size, output will be of same size as input.
valid: Output will be smaller than input if filter is larger than 1×1.
It can also be a number or conv_util.ExplicitPadding.
dataFormat: Out of two strings it can be either: “NHWC”, “NCHW”. With the default format “NHWC”, the data is stored in the order of: [batch, height, width, channels]. Data format of the input and output data need to be specified. This is optional.
dilations: The dilation rate is two tuples of integers that check the rate of the convolution.[dilationHeight ,dilationWidth]is passed as parameters. This is optional.
dimRoundingMode: The string format will be either ‘ceil’ or ’round’ or ‘floor’. This is optional.
 
Example 1: Here we take a 4-dimensional tensor input and another 4d kernel and then apply convolution which results in the output tensor. The shapes are also printed along with the output tensor.
Javascript
// Importing the tensorflow.js libraryimport * as tf from "@tensorflow/tfjs"  // Input tensorconst x = tf.tensor4d([[  [[2], [1], [2], [0], [1]],  [[1], [3], [2], [2], [3]],  [[1], [1], [3], [3], [0]],  [[2], [2], [0], [1], [1]],  [[0], [0], [3], [1], [2]], ]]);console.log('Shape of the input:',x.shape);  // Kernel has been setconst kernel = tf.tensor4d([     [ [[2, 0.1]], [[3, 0.2]] ],     [ [[0, 0.3]], [[1, 0.4]] ],]);  console.log('Shape of the kernel:',kernel.shape);  // Output tensor after convolutionlet out = tf.conv2d(x, kernel,     strides = [1, 1, 1, 1], 'same');  out.print();console.log('Shape of the output:',out.shape)
Output:
Shape of the input: 1,5,5,1
Shape of the kernel: 2,2,1,2
Tensor
    [[[[10, 1.9000001],
       [10, 2.2      ],
       [6 , 1.6      ],
       [6 , 2        ],
       [2 , 1        ]],

      [[12, 1.4      ],
       [15, 2.2      ],
       [13, 2.7      ],
       [13, 1.7      ],
       [6 , 0.3      ]],

      [[7 , 1.7      ],
       [11, 1.3      ],
       [16, 1.3000001],
       [7 , 1        ],
       [0 , 0.3      ]],

      [[10, 0.6      ],
       [7 , 1.4      ],
       [4 , 1.5      ],
       [7 , 1.4000001],
       [2 , 0.7      ]],

      [[0 , 0        ],
       [9 , 0.6      ],
       [9 , 0.5      ],
       [8 , 0.5      ],
       [4 , 0.2      ]]]]
Shape of the output: 1,5,5,2
Example 2: Convolutions play an important role in designing the architecture of deep learning model. In this example, we create a function and within define a sequential model. After this we add model layers using tf.layers.conv2d() with input shape, filter, kernel, padding as its parameters. Then after subsequent maxpooling, flattening and compiling we return the model.
Javascript
// Define the model architecturefunction buildModel() {    const model = tf.sequential();      // Add the model layers starting    // with convolution layers    model.add(tf.layers.conv2d({        inputShape: [28, 28, 1],        filters: 8,        kernelSize: 5,        padding: 'same',        activation: 'relu'    }));      model.add(tf.layers.maxPooling2d({        poolSize: 2,        strides: 2    }));      // Again we set  another convolution layer    model.add(tf.layers.conv2d({        filters: 16,        kernelSize: 5,        padding: 'same',        activation: 'relu'    }));          model.add(tf.layers.maxPooling2d({        poolSize: 3,        strides: 3    }));      const numofClasses = 10;    model.add(tf.layers.flatten());    model.add(tf.layers.dense({        units: numofClasses,        activation: 'softmax'    }));      // Compile the model    model.compile({        optimizer: 'adam',        loss: 'categoricalCrossentropy',        metrics: ['accuracy']    });      return model;}const jsmodel = buildModel()jsmodel.summary()
Output:
_________________________________________________________________
Layer (type)                 Output shape              Param #   
=================================================================
conv2d_Conv2D1 (Conv2D)      [null,28,28,8]            208       
_________________________________________________________________
max_pooling2d_MaxPooling2D1  [null,14,14,8]            0         
_________________________________________________________________
conv2d_Conv2D2 (Conv2D)      [null,14,14,16]           3216      
_________________________________________________________________
max_pooling2d_MaxPooling2D2  [null,4,4,16]             0         
_________________________________________________________________
flatten_Flatten1 (Flatten)   [null,256]                0         
_________________________________________________________________
dense_Dense1 (Dense)         [null,10]                 2570      
=================================================================
Total params: 5994
Trainable params: 5994
Non-trainable params: 0
_________________________________________________________________
Reference: https://js.tensorflow.org/api/3.6.0/#layers.conv2d
Picked
Tensorflow.js
JavaScript
Web Technologies
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.