當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。