1 | "use strict";
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 |
|
17 |
|
18 | Object.defineProperty(exports, "__esModule", { value: true });
|
19 | var tfjs_1 = require("@tensorflow/tfjs");
|
20 | var nodejs_kernel_backend_1 = require("../nodejs_kernel_backend");
|
21 | exports.depthwiseConv2dNativeConfig = {
|
22 | kernelName: tfjs_1.DepthwiseConv2dNative,
|
23 | backendName: 'tensorflow',
|
24 | kernelFunc: function (args) {
|
25 | var _a = args.inputs, x = _a.x, filter = _a.filter;
|
26 | var backend = args.backend;
|
27 | var _b = args.attrs, strides = _b.strides, pad = _b.pad, dilations = _b.dilations, dimRoundingMode = _b.dimRoundingMode;
|
28 | var $dilations = dilations;
|
29 | if ($dilations == null) {
|
30 | $dilations = [1, 1];
|
31 | }
|
32 | var convInfo = tfjs_1.backend_util.computeConv2DInfo(x.shape, filter.shape, strides, $dilations, pad, dimRoundingMode, true );
|
33 | return depthwiseConv2dNativeImpl(x, filter, convInfo, backend);
|
34 | }
|
35 | };
|
36 | function depthwiseConv2dNativeImpl(input, filter, convInfo, backend) {
|
37 | if (convInfo.padInfo.type !== 'VALID' && convInfo.padInfo.type !== 'SAME' &&
|
38 | convInfo.padInfo.type !== 'EXPLICIT') {
|
39 | throw new Error("TF Backend supports only 'valid' and 'same' padding " +
|
40 | ("while padding was " + convInfo.padInfo.type));
|
41 | }
|
42 | var strides = [1, convInfo.strideHeight, convInfo.strideWidth, 1];
|
43 | var padding = convInfo.padInfo.type;
|
44 | var dataFormat = convInfo.dataFormat === 'channelsLast' ? 'NHWC' : 'NCHW';
|
45 | var dilations = [1, convInfo.dilationHeight, convInfo.dilationWidth, 1];
|
46 | var opAttrs = [
|
47 | nodejs_kernel_backend_1.createTensorsTypeOpAttr('T', input.dtype),
|
48 | { name: 'strides', type: backend.binding.TF_ATTR_INT, value: strides },
|
49 | { name: 'padding', type: backend.binding.TF_ATTR_STRING, value: padding }, {
|
50 | name: 'data_format',
|
51 | type: backend.binding.TF_ATTR_STRING,
|
52 | value: dataFormat
|
53 | },
|
54 | { name: 'dilations', type: backend.binding.TF_ATTR_INT, value: dilations }
|
55 | ];
|
56 | if (padding === 'EXPLICIT') {
|
57 | var padValue = [
|
58 | convInfo.padInfo.top, convInfo.padInfo.bottom, convInfo.padInfo.left,
|
59 | convInfo.padInfo.right
|
60 | ];
|
61 | opAttrs.push({
|
62 | name: 'explicit_paddings',
|
63 | type: backend.binding.TF_ATTR_INT,
|
64 | value: dataFormat === 'NHWC' ? [0, 0].concat(padValue, [0, 0]) : [0, 0, 0, 0].concat(padValue)
|
65 | });
|
66 | }
|
67 | return backend.executeSingleOutput(tfjs_1.DepthwiseConv2dNative, opAttrs, [input, filter]);
|
68 | }
|
69 | exports.depthwiseConv2dNativeImpl = depthwiseConv2dNativeImpl;
|