当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Tensorflow.js tf.conv2d()用法及代码示例


Tensorflow.js 是 Google 开发的一个 javascript 库,用于在浏览器或 Node.js 中运行和训练机器学习模型。

tf.conv2d() 函数用于计算给定输入的二维卷积。在深度神经网络中,我们使用这个卷积层来创建一个卷积核,当应用于输入层时会产生一个输出张量。

用法:

tf.conv2d (x, filter, strides, pad, dataFormat?, 
        dilations?, dimRoundingMode?) 

参数:

  • x:给出了形状为 [batch, height, width, inChannels] 的 3 级和 4 级张量。它可以是 3D 张量、4D 张量或类型化数组。
  • filter:过滤器等级为 4,形状参数 [filterHeight, filterWidth, inDepth, outDepth] 被传递。它需要是一个 4D 张量、嵌套数组或类型化数组。
  • strides([number, number]|number):卷积的步幅:[strideHeight, strideWidth]。
  • pad:填充算法的类型。
    • Same:无论过滤器大小如何,输出都将与输入大小相同。
    • valid:如果过滤器大于 1×1,输出将小于输入。
    • 它也可以是数字或 conv_util.ExplicitPadding。
  • dataFormat:在两个字符串中,它可以是:“NHWC”、“NCHW”。使用默认格式“NHWC”,数据的存储顺序为:[batch, height, width, channels]。需要指定输入和输出数据的数据格式。这是可选的。
  • dilations:膨胀率是两个整数元组,用于检查卷积率。[dilationHeight ,dilationWidth] 作为参数传递。这是可选的。
  • dimRoundingMode:字符串格式将为 ‘ceil’ 或“round”或 ‘floor’。这是可选的。



范例1:这里我们采用一个 4 维张量输入和另一个 4d 内核,然后应用卷积产生输出张量。形状也与输出张量一起打印。

Javascript


// Importing the tensorflow.js library
import * as tf from "@tensorflow/tfjs"
  
// Input tensor
const 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 set
const 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 convolution
let out = tf.conv2d(x, kernel, 
    strides = [1, 1, 1, 1], 'same');
  
out.print();
console.log('Shape of the output:',out.shape)

输出:

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

范例2:卷积在设计深度学习模型的架构中起着重要作用。在此示例中,我们创建了一个函数并在其中定义了一个顺序模型。在此之后,我们使用 tf.layers.conv2d() 添加模型层,输入形状、过滤器、内核、填充作为其参数。然后在随后的最大池化、展平和编译之后,我们返回模型。

Javascript


// Define the model architecture
function 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()

输出:

_________________________________________________________________
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
_________________________________________________________________

参考:https://js.tensorflow.org/api/3.6.0/#layers.conv2d

相关用法


注:本文由纯净天空筛选整理自barnadipdey2510大神的英文原创作品 Tensorflow.js tf.conv2d() Function。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。