UNPKG

@tensorflow/tfjs-core

Version:

Hardware-accelerated JavaScript library for machine intelligence

665 lines 31.6 kB
import * as tf from '../index'; import { describeWithFlags } from '../jasmine_util'; import { ALL_ENVS, expectArraysClose } from '../test_util'; describeWithFlags('resizeBilinear', ALL_ENVS, function () { it('simple alignCorners=false', function () { var input = tf.tensor3d([2, 2, 4, 4], [2, 2, 1]); var output = input.resizeBilinear([3, 3], false); expectArraysClose(output, [2, 2, 2, 10 / 3, 10 / 3, 10 / 3, 4, 4, 4]); }); it('simple alignCorners=true', function () { var input = tf.tensor3d([2, 2, 4, 4], [2, 2, 1]); var output = input.resizeBilinear([3, 3], true); expectArraysClose(output, [2, 2, 2, 3, 3, 3, 4, 4, 4]); }); it('matches tensorflow w/ random numbers alignCorners=false', function () { var input = tf.tensor3d([ 1.19074044, 0.91373104, 2.01611669, -0.52270832, 0.38725395, 1.30809779, 0.61835143, 3.49600659, 2.09230986, 0.56473997, 0.03823943, 1.19864896 ], [2, 3, 2]); var output = input.resizeBilinear([4, 5], false); expectArraysClose(output, [ 1.19074047, 0.91373104, 1.68596613, 0.05186744, 1.69034398, -0.15654698, 0.7130264, 0.94193673, 0.38725394, 1.30809784, 0.9045459, 2.20486879, 1.59434628, 0.89455694, 1.68591988, 0.26748738, 0.58103991, 1.00690198, 0.21274668, 1.25337338, 0.6183514, 3.49600649, 1.50272655, 1.73724651, 1.68149579, 0.69152176, 0.44905344, 1.07186723, 0.03823943, 1.19864893, 0.6183514, 3.49600649, 1.50272655, 1.73724651, 1.68149579, 0.69152176, 0.44905344, 1.07186723, 0.03823943, 1.19864893 ]); }); it('matches tensorflow w/ random numbers alignCorners=true', function () { var input = tf.tensor3d([ 1.56324531, 2.13817752, 1.44398421, 1.07632684, 0.59306785, -0.36970865, 1.62451879, 1.8367334, 1.13944798, 2.01993218, 2.01919952, 2.67524054 ], [2, 3, 2]); var output = input.resizeBilinear([4, 5], true); expectArraysClose(output, [ 1.5632453, 2.13817763, 1.50361478, 1.60725224, 1.44398427, 1.07632685, 1.01852608, 0.35330909, 0.59306782, -0.36970866, 1.58366978, 2.03769612, 1.46307099, 1.71427906, 1.3424722, 1.39086199, 1.20545864, 1.01806819, 1.06844509, 0.6452744, 1.60409427, 1.93721485, 1.42252707, 1.82130599, 1.24096, 1.70539713, 1.3923912, 1.68282723, 1.54382229, 1.66025746, 1.62451875, 1.83673346, 1.38198328, 1.92833281, 1.13944793, 2.01993227, 1.57932377, 2.34758639, 2.01919961, 2.67524052 ]); }); it('batch of 2, simple, alignCorners=true', function () { var input = tf.tensor4d([2, 2, 4, 4, 3, 3, 5, 5], [2, 2, 2, 1]); var output = input.resizeBilinear([3, 3], true); expectArraysClose(output, [2, 2, 2, 3, 3, 3, 4, 4, 4, 3, 3, 3, 4, 4, 4, 5, 5, 5]); }); it('target width = 1, alignCorners=true', function () { var input = tf.tensor3d([ [ [120.68856811523438, 134.51638793945312, 83.03671264648438], [121.58008575439453, 113.28836059570312, 136.3172149658203], [79.38370513916016, 101.87127685546875, 104.54979705810547], [96.31678771972656, 111.77168273925781, 83.73509979248047] ], [ [119.45088195800781, 88.98846435546875, 97.47553253173828], [117.5562973022461, 108.26356506347656, 99.62212371826172], [136.62701416015625, 94.10433197021484, 80.97366333007812], [83.61205291748047, 90.60148620605469, 81.82512664794922] ], [ [103.0362777709961, 123.1098403930664, 125.62944030761719], [92.2915267944336, 103.15729522705078, 119.18060302734375], [102.93293762207031, 117.821044921875, 99.40152740478516], [96.32952117919922, 105.80963134765625, 104.8491439819336] ], [ [104.87507629394531, 134.0189208984375, 111.02627563476562], [85.4534683227539, 107.68426513671875, 103.03722381591797], [89.70533752441406, 98.25298309326172, 78.42916870117188], [113.6744613647461, 95.8189697265625, 122.75005340576172] ] ]); var output = input.resizeBilinear([3, 1], true); var expected = tf.tensor3d([ [[120.68857, 134.51639, 83.03671]], [[111.243576, 106.04915, 111.55249]], [[104.87508, 134.01892, 111.026276]] ]); expectArraysClose(output, expected); }); it('target height = 1, alignCorners=true', function () { var input = tf.tensor3d([ [ [120.68856811523438, 134.51638793945312, 83.03671264648438], [121.58008575439453, 113.28836059570312, 136.3172149658203], [79.38370513916016, 101.87127685546875, 104.54979705810547], [96.31678771972656, 111.77168273925781, 83.73509979248047] ], [ [119.45088195800781, 88.98846435546875, 97.47553253173828], [117.5562973022461, 108.26356506347656, 99.62212371826172], [136.62701416015625, 94.10433197021484, 80.97366333007812], [83.61205291748047, 90.60148620605469, 81.82512664794922] ], [ [103.0362777709961, 123.1098403930664, 125.62944030761719], [92.2915267944336, 103.15729522705078, 119.18060302734375], [102.93293762207031, 117.821044921875, 99.40152740478516], [96.32952117919922, 105.80963134765625, 104.8491439819336] ], [ [104.87507629394531, 134.0189208984375, 111.02627563476562], [85.4534683227539, 107.68426513671875, 103.03722381591797], [89.70533752441406, 98.25298309326172, 78.42916870117188], [113.6744613647461, 95.8189697265625, 122.75005340576172] ] ]); var output = input.resizeBilinear([1, 3], true); var expected = tf.tensor3d([[ [120.68857, 134.51639, 83.03671], [100.481895, 107.57982, 120.4335], [96.31679, 111.77168, 83.7351] ]]); expectArraysClose(output, expected); }); }); describeWithFlags('resizeBilinear gradients', ALL_ENVS, function () { it('greyscale: upscale, same aspect ratio', function () { var input = tf.tensor3d([[[100.0], [50.0]], [[60.0], [20.0]]]); var dy = tf.tensor3d([ [[1.0], [2.0], [3.0], [4.0]], [[5.0], [6.0], [7.0], [8.0]], [[9.0], [10.0], [11.0], [12.0]], [[13.0], [14.0], [15.0], [16.0]] ]); var size = [4, 4]; var alignCorners = false; var g = tf.grad(function (i) { return tf.image.resizeBilinear(i, size, alignCorners); }); var output = g(input, dy); var expected = tf.tensor3d([[[6.0], [17.0]], [[38.0], [75.0]]]); expectArraysClose(output, expected); }); it('greyscale: upscale, same aspect ratio, align corners', function () { var input = tf.tensor3d([[[100.0], [50.0]], [[60.0], [20.0]]]); var dy = tf.tensor3d([ [[1.0], [2.0], [3.0], [4.0]], [[5.0], [6.0], [7.0], [8.0]], [[9.0], [10.0], [11.0], [12.0]], [[13.0], [14.0], [15.0], [16.0]] ]); var size = [4, 4]; var alignCorners = true; var g = tf.grad(function (i) { return tf.image.resizeBilinear(i, size, alignCorners); }); var output = g(input, dy); var expected = tf.tensor3d([ [[17.333330154418945], [23.999998092651367]], [[44.0], [50.66666793823242]] ]); expectArraysClose(output, expected); }); it('greyscale: upscale, taller than wider', function () { var input = tf.tensor3d([[[100.0], [50.0]], [[60.0], [20.0]]]); var dy = tf.tensor3d([ [[1.0], [2.0], [3.0], [4.0]], [[5.0], [6.0], [7.0], [8.0]], [[9.0], [10.0], [11.0], [12.0]], [[13.0], [14.0], [15.0], [16.0]], [[17.0], [18.0], [19.0], [20.0]], [[21.0], [22.0], [23.0], [24.0]], [[25.0], [26.0], [27.0], [28.0]], [[29.0], [30.0], [31.0], [32.0]], [[33.0], [34.0], [35.0], [36.0]] ]); var size = [9, 4]; var alignCorners = false; var g = tf.grad(function (i) { return tf.image.resizeBilinear(i, size, alignCorners); }); var output = g(input, dy); var expected = tf.tensor3d([ [[25.55555534362793], [55.5555534362793]], [[208.44444274902344], [376.4444274902344]] ]); expectArraysClose(output, expected); }); it('greyscale: upscale, taller than wider, align corners', function () { var input = tf.tensor3d([[[100.0], [50.0]], [[60.0], [20.0]]]); var dy = tf.tensor3d([ [[1.0], [2.0], [3.0], [4.0]], [[5.0], [6.0], [7.0], [8.0]], [[9.0], [10.0], [11.0], [12.0]], [[13.0], [14.0], [15.0], [16.0]], [[17.0], [18.0], [19.0], [20.0]], [[21.0], [22.0], [23.0], [24.0]], [[25.0], [26.0], [27.0], [28.0]], [[29.0], [30.0], [31.0], [32.0]], [[33.0], [34.0], [35.0], [36.0]] ]); var size = [9, 4]; var alignCorners = true; var g = tf.grad(function (i) { return tf.image.resizeBilinear(i, size, alignCorners); }); var output = g(input, dy); var expected = tf.tensor3d([[[99.0], [114.0]], [[219.00001525878906], [233.99998474121094]]]); expectArraysClose(output, expected); }); it('greyscale: upscale, wider than taller', function () { var input = tf.tensor3d([[[100.0], [50.0]], [[60.0], [20.0]]]); var dy = tf.tensor3d([ [[1.0], [2.0], [3.0], [4.0], [5.0], [6.0], [7.0]], [[8.0], [9.0], [10.0], [11.0], [12.0], [13.0], [14.0]], [[15.0], [16.0], [17.0], [18.0], [19.0], [20.0], [21.0]], [[22.0], [23.0], [24.0], [25.0], [26.0], [27.0], [28.0]] ]); var size = [4, 7]; var alignCorners = false; var g = tf.grad(function (i) { return tf.image.resizeBilinear(i, size, alignCorners); }); var output = g(input, dy); var expected = tf.tensor3d([ [[14.428570747375488], [52.07142639160156]], [[98.71427917480469], [240.78573608398438]] ]); expectArraysClose(output, expected); }); it('greyscale: upscale, wider than taller, align corners', function () { var input = tf.tensor3d([[[100.0], [50.0]], [[60.0], [20.0]]]); var dy = tf.tensor3d([ [[1.0], [2.0], [3.0], [4.0], [5.0], [6.0], [7.0]], [[8.0], [9.0], [10.0], [11.0], [12.0], [13.0], [14.0]], [[15.0], [16.0], [17.0], [18.0], [19.0], [20.0], [21.0]], [[22.0], [23.0], [24.0], [25.0], [26.0], [27.0], [28.0]] ]); var size = [4, 7]; var alignCorners = true; var g = tf.grad(function (i) { return tf.image.resizeBilinear(i, size, alignCorners); }); var output = g(input, dy); var expected = tf.tensor3d([[[51.33332824707031], [70.0]], [[133.0], [151.66668701171875]]]); expectArraysClose(output, expected); }); it('greyscale: downscale, same aspect ratio', function () { var input = tf.tensor3d([ [[100.0], [50.0], [25.0], [10.0]], [[60.0], [20.0], [80.0], [20.0]], [[40.0], [15.0], [200.0], [203.0]], [[40.0], [10.0], [230.0], [200.0]] ]); var dy = tf.tensor3d([[[1.0], [2.0]], [[3.0], [4.0]]]); var size = [2, 2]; var alignCorners = false; var g = tf.grad(function (i) { return tf.image.resizeBilinear(i, size, alignCorners); }); var output = g(input, dy); var expected = tf.tensor3d([ [[1.0], [0.0], [2.0], [0.0]], [[0.0], [0.0], [0.0], [0.0]], [[3.0], [0.0], [4.0], [0.0]], [[0.0], [0.0], [0.0], [0.0]] ]); expectArraysClose(output, expected); }); it('greyscale: downscale, same aspect ratio, align corners', function () { var input = tf.tensor3d([ [[100.0], [50.0], [25.0], [10.0]], [[60.0], [20.0], [80.0], [20.0]], [[40.0], [15.0], [200.0], [203.0]], [[40.0], [10.0], [230.0], [200.0]] ]); var dy = tf.tensor3d([[[1.0], [2.0]], [[3.0], [4.0]]]); var size = [2, 2]; var alignCorners = true; var g = tf.grad(function (i) { return tf.image.resizeBilinear(i, size, alignCorners); }); var output = g(input, dy); var expected = tf.tensor3d([ [[1.0], [0.0], [0.0], [2.0]], [[0.0], [0.0], [0.0], [0.0]], [[0.0], [0.0], [0.0], [0.0]], [[3.0], [0.0], [0.0], [4.0]] ]); expectArraysClose(output, expected); }); it('greyscale: downscale, taller than wider', function () { var input = tf.tensor3d([ [[100.0], [50.0], [25.0], [10.0]], [[60.0], [20.0], [80.0], [20.0]], [[40.0], [15.0], [200.0], [203.0]], [[40.0], [10.0], [230.0], [200.0]] ]); var dy = tf.tensor3d([[[1.0], [2.0]], [[3.0], [4.0]], [[5.0], [6.0]]]); var size = [3, 2]; var alignCorners = false; var g = tf.grad(function (i) { return tf.image.resizeBilinear(i, size, alignCorners); }); var output = g(input, dy); var expected = tf.tensor3d([ [[1.0], [0.0], [2.0], [0.0]], [[1.9999998807907104], [0.0], [2.6666665077209473], [0.0]], [[2.6666665077209473], [0.0], [3.3333330154418945], [0.0]], [[3.333333730697632], [0.0], [4.000000476837158], [0.0]] ]); expectArraysClose(output, expected); }); it('greyscale: downscale, taller than wider, align corners', function () { var input = tf.tensor3d([ [[100.0], [50.0], [25.0], [10.0]], [[60.0], [20.0], [80.0], [20.0]], [[40.0], [15.0], [200.0], [203.0]], [[40.0], [10.0], [230.0], [200.0]] ]); var dy = tf.tensor3d([[[1.0], [2.0]], [[3.0], [4.0]], [[5.0], [6.0]]]); var size = [3, 2]; var alignCorners = true; var g = tf.grad(function (i) { return tf.image.resizeBilinear(i, size, alignCorners); }); var output = g(input, dy); var expected = tf.tensor3d([ [[1.0], [0.0], [0.0], [2.0]], [[1.5], [0.0], [0.0], [2.0]], [[1.5], [0.0], [0.0], [2.0]], [[5.0], [0.0], [0.0], [6.0]] ]); expectArraysClose(output, expected); }); it('greyscale: downscale, wider than taller', function () { var input = tf.tensor3d([ [[100.0], [50.0], [25.0], [10.0]], [[60.0], [20.0], [80.0], [20.0]], [[40.0], [15.0], [200.0], [203.0]], [[40.0], [10.0], [230.0], [200.0]] ]); var dy = tf.tensor3d([[[1.0], [2.0], [3.0]], [[4.0], [5.0], [6.0]]]); var size = [2, 3]; var alignCorners = false; var g = tf.grad(function (i) { return tf.image.resizeBilinear(i, size, alignCorners); }); var output = g(input, dy); var expected = tf.tensor3d([ [[1.0], [1.3333332538604736], [1.6666665077209473], [2.000000238418579]], [[0.0], [0.0], [0.0], [0.0]], [[4.0], [3.3333330154418945], [3.6666665077209473], [4.000000476837158]], [[0.0], [0.0], [0.0], [0.0]] ]); expectArraysClose(output, expected); }); it('greyscale: downscale, wider than taller, align corners', function () { var input = tf.tensor3d([ [[100.0], [50.0], [25.0], [10.0]], [[60.0], [20.0], [80.0], [20.0]], [[40.0], [15.0], [200.0], [203.0]], [[40.0], [10.0], [230.0], [200.0]] ]); var dy = tf.tensor3d([[[1.0], [2.0], [3.0]], [[4.0], [5.0], [6.0]]]); var size = [2, 3]; var alignCorners = true; var g = tf.grad(function (i) { return tf.image.resizeBilinear(i, size, alignCorners); }); var output = g(input, dy); var expected = tf.tensor3d([ [[1.0], [1.0], [1.0], [3.0]], [[0.0], [0.0], [0.0], [0.0]], [[0.0], [0.0], [0.0], [0.0]], [[4.0], [2.5], [2.5], [6.0]] ]); expectArraysClose(output, expected); }); it('greyscale: same size', function () { var input = tf.tensor3d([[[100.0], [50.0]], [[60.0], [20.0]]]); var dy = tf.tensor3d([[[1.0], [2.0]], [[3.0], [4.0]]]); var size = [2, 2]; var alignCorners = false; var g = tf.grad(function (i) { return tf.image.resizeBilinear(i, size, alignCorners); }); var output = g(input, dy); var expected = tf.tensor3d([[[1.0], [2.0]], [[3.0], [4.0]]]); expectArraysClose(output, expected); }); it('greyscale: same size, align corners', function () { var input = tf.tensor3d([[[100.0], [50.0]], [[60.0], [20.0]]]); var dy = tf.tensor3d([[[1.0], [2.0]], [[3.0], [4.0]]]); var size = [2, 2]; var alignCorners = true; var g = tf.grad(function (i) { return tf.image.resizeBilinear(i, size, alignCorners); }); var output = g(input, dy); var expected = tf.tensor3d([[[1.0], [2.0]], [[3.0], [4.0]]]); expectArraysClose(output, expected); }); it('color: upscale, wider than taller', function () { var input = tf.tensor3d([ [ [115.11029815673828, 111.90936279296875, 66.87433624267578], [72.03849029541016, 81.86637878417969, 119.53585815429688] ], [ [68.555419921875, 97.49642181396484, 116.90741729736328], [128.69467163085938, 86.78314208984375, 104.3116683959961] ] ]); var dy = tf.tensor3d([ [ [1.0, 2.0, 3.0], [4.0, 5.0, 6.0], [7.0, 8.0, 9.0], [10.0, 11.0, 12.0], [13.0, 14.0, 15.0] ], [ [16.0, 17.0, 18.0], [19.0, 20.0, 21.0], [22.0, 23.0, 24.0], [25.0, 26.0, 27.0], [28.0, 29.0, 30.0] ], [ [31.0, 32.0, 33.0], [34.0, 35.0, 36.0], [37.0, 38.0, 39.0], [40.0, 41.0, 42.0], [43.0, 44.0, 45.0] ] ]); var size = [3, 5]; var alignCorners = false; var g = tf.grad(function (i) { return tf.image.resizeBilinear(i, size, alignCorners); }); var output = g(input, dy); var expected = tf.tensor3d([ [ [15.399999618530273, 17.799999237060547, 20.19999885559082], [56.26666259765625, 60.533329010009766, 64.79999542236328] ], [ [80.00000762939453, 83.0, 86.0], [178.33334350585938, 183.66668701171875, 189.00001525878906] ] ]); expectArraysClose(output, expected); }); it('color: upscale, wider than taller, align corners', function () { var input = tf.tensor3d([ [ [115.11029815673828, 111.90936279296875, 66.87433624267578], [72.03849029541016, 81.86637878417969, 119.53585815429688] ], [ [68.555419921875, 97.49642181396484, 116.90741729736328], [128.69467163085938, 86.78314208984375, 104.3116683959961] ] ]); var dy = tf.tensor3d([ [ [1.0, 2.0, 3.0], [4.0, 5.0, 6.0], [7.0, 8.0, 9.0], [10.0, 11.0, 12.0], [13.0, 14.0, 15.0] ], [ [16.0, 17.0, 18.0], [19.0, 20.0, 21.0], [22.0, 23.0, 24.0], [25.0, 26.0, 27.0], [28.0, 29.0, 30.0] ], [ [31.0, 32.0, 33.0], [34.0, 35.0, 36.0], [37.0, 38.0, 39.0], [40.0, 41.0, 42.0], [43.0, 44.0, 45.0] ] ]); var size = [3, 5]; var alignCorners = true; var g = tf.grad(function (i) { return tf.image.resizeBilinear(i, size, alignCorners); }); var output = g(input, dy); var expected = tf.tensor3d([ [[33.75, 37.5, 41.25], [56.25, 60.0, 63.75]], [[108.75, 112.5, 116.25], [131.25, 135.0, 138.75]] ]); expectArraysClose(output, expected); }); it('color: downscale, taller than wider', function () { var input = tf.tensor3d([ [ [120.68856811523438, 134.51638793945312, 83.03671264648438], [121.58008575439453, 113.28836059570312, 136.3172149658203], [79.38370513916016, 101.87127685546875, 104.54979705810547], [96.31678771972656, 111.77168273925781, 83.73509979248047] ], [ [119.45088195800781, 88.98846435546875, 97.47553253173828], [117.5562973022461, 108.26356506347656, 99.62212371826172], [136.62701416015625, 94.10433197021484, 80.97366333007812], [83.61205291748047, 90.60148620605469, 81.82512664794922] ], [ [103.0362777709961, 123.1098403930664, 125.62944030761719], [92.2915267944336, 103.15729522705078, 119.18060302734375], [102.93293762207031, 117.821044921875, 99.40152740478516], [96.32952117919922, 105.80963134765625, 104.8491439819336] ], [ [104.87507629394531, 134.0189208984375, 111.02627563476562], [85.4534683227539, 107.68426513671875, 103.03722381591797], [89.70533752441406, 98.25298309326172, 78.42916870117188], [113.6744613647461, 95.8189697265625, 122.75005340576172] ] ]); var dy = tf.tensor3d([[[1.0, 2.0, 3.0]], [[4.0, 5.0, 6.0]], [[7.0, 8.0, 9.0]]]); var size = [3, 1]; var alignCorners = false; var g = tf.grad(function (i) { return tf.image.resizeBilinear(i, size, alignCorners); }); var output = g(input, dy); var expected = tf.tensor3d([ [[1.0, 2.0, 3.0], [0.0, 0.0, 0.0], [0.0, 0.0, 0.0], [0.0, 0.0, 0.0]], [ [2.6666665077209473, 3.3333330154418945, 3.999999761581421], [0.0, 0.0, 0.0], [0.0, 0.0, 0.0], [0.0, 0.0, 0.0] ], [ [3.666666269302368, 4.3333330154418945, 4.999999523162842], [0.0, 0.0, 0.0], [0.0, 0.0, 0.0], [0.0, 0.0, 0.0] ], [ [4.6666669845581055, 5.333333969116211, 6.000000953674316], [0.0, 0.0, 0.0], [0.0, 0.0, 0.0], [0.0, 0.0, 0.0] ] ]); expectArraysClose(output, expected); }); it('color: downscale, width = 1, align corners', function () { var input = tf.tensor3d([ [ [120.68856811523438, 134.51638793945312, 83.03671264648438], [121.58008575439453, 113.28836059570312, 136.3172149658203], [79.38370513916016, 101.87127685546875, 104.54979705810547], [96.31678771972656, 111.77168273925781, 83.73509979248047] ], [ [119.45088195800781, 88.98846435546875, 97.47553253173828], [117.5562973022461, 108.26356506347656, 99.62212371826172], [136.62701416015625, 94.10433197021484, 80.97366333007812], [83.61205291748047, 90.60148620605469, 81.82512664794922] ], [ [103.0362777709961, 123.1098403930664, 125.62944030761719], [92.2915267944336, 103.15729522705078, 119.18060302734375], [102.93293762207031, 117.821044921875, 99.40152740478516], [96.32952117919922, 105.80963134765625, 104.8491439819336] ], [ [104.87507629394531, 134.0189208984375, 111.02627563476562], [85.4534683227539, 107.68426513671875, 103.03722381591797], [89.70533752441406, 98.25298309326172, 78.42916870117188], [113.6744613647461, 95.8189697265625, 122.75005340576172] ] ]); var dy = tf.tensor3d([[[1.0, 2.0, 3.0]], [[4.0, 5.0, 6.0]], [[7.0, 8.0, 9.0]]]); var size = [3, 1]; var alignCorners = true; var g = tf.grad(function (i) { return tf.image.resizeBilinear(i, size, alignCorners); }); var output = g(input, dy); var expected = tf.tensor3d([ [[1.0, 2.0, 3.0], [0.0, 0.0, 0.0], [0.0, 0.0, 0.0], [0.0, 0.0, 0.0]], [[2.0, 2.5, 3.0], [0.0, 0.0, 0.0], [0.0, 0.0, 0.0], [0.0, 0.0, 0.0]], [[2.0, 2.5, 3.0], [0.0, 0.0, 0.0], [0.0, 0.0, 0.0], [0.0, 0.0, 0.0]], [[7.0, 8.0, 9.0], [0.0, 0.0, 0.0], [0.0, 0.0, 0.0], [0.0, 0.0, 0.0]] ]); expectArraysClose(output, expected); }); it('color: downscale, height = 1, align corners', function () { var input = tf.tensor3d([ [ [120.68856811523438, 134.51638793945312, 83.03671264648438], [121.58008575439453, 113.28836059570312, 136.3172149658203], [79.38370513916016, 101.87127685546875, 104.54979705810547], [96.31678771972656, 111.77168273925781, 83.73509979248047] ], [ [119.45088195800781, 88.98846435546875, 97.47553253173828], [117.5562973022461, 108.26356506347656, 99.62212371826172], [136.62701416015625, 94.10433197021484, 80.97366333007812], [83.61205291748047, 90.60148620605469, 81.82512664794922] ], [ [103.0362777709961, 123.1098403930664, 125.62944030761719], [92.2915267944336, 103.15729522705078, 119.18060302734375], [102.93293762207031, 117.821044921875, 99.40152740478516], [96.32952117919922, 105.80963134765625, 104.8491439819336] ], [ [104.87507629394531, 134.0189208984375, 111.02627563476562], [85.4534683227539, 107.68426513671875, 103.03722381591797], [89.70533752441406, 98.25298309326172, 78.42916870117188], [113.6744613647461, 95.8189697265625, 122.75005340576172] ] ]); var dy = tf.tensor3d([[[1., 2., 3.], [4., 5., 6.], [7., 8., 9.]]]); var size = [1, 3]; var alignCorners = true; var g = tf.grad(function (i) { return tf.image.resizeBilinear(i, size, alignCorners); }); var output = g(input, dy); var expected = tf.tensor3d([ [[1., 2., 3.], [2., 2.5, 3.], [2., 2.5, 3.], [7., 8., 9.]], [[0., 0., 0.], [0., 0., 0.], [0., 0., 0.], [0., 0., 0.]], [[0., 0., 0.], [0., 0., 0.], [0., 0., 0.], [0., 0., 0.]], [[0., 0., 0.], [0., 0., 0.], [0., 0., 0.], [0., 0., 0.]] ]); expectArraysClose(output, expected); }); it('color: downscale, taller than wider, align corners', function () { var input = tf.tensor3d([ [ [120.68856811523438, 134.51638793945312, 83.03671264648438], [121.58008575439453, 113.28836059570312, 136.3172149658203], [79.38370513916016, 101.87127685546875, 104.54979705810547], [96.31678771972656, 111.77168273925781, 83.73509979248047] ], [ [119.45088195800781, 88.98846435546875, 97.47553253173828], [117.5562973022461, 108.26356506347656, 99.62212371826172], [136.62701416015625, 94.10433197021484, 80.97366333007812], [83.61205291748047, 90.60148620605469, 81.82512664794922] ], [ [103.0362777709961, 123.1098403930664, 125.62944030761719], [92.2915267944336, 103.15729522705078, 119.18060302734375], [102.93293762207031, 117.821044921875, 99.40152740478516], [96.32952117919922, 105.80963134765625, 104.8491439819336] ], [ [104.87507629394531, 134.0189208984375, 111.02627563476562], [85.4534683227539, 107.68426513671875, 103.03722381591797], [89.70533752441406, 98.25298309326172, 78.42916870117188], [113.6744613647461, 95.8189697265625, 122.75005340576172] ] ]); var dy = tf.tensor3d([ [[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]], [[7.0, 8.0, 9.0], [10.0, 11.0, 12.0]], [[13.0, 14.0, 15.0], [16.0, 17.0, 18.0]] ]); var size = [3, 2]; var alignCorners = true; var g = tf.grad(function (i) { return tf.image.resizeBilinear(i, size, alignCorners); }); var output = g(input, dy); var expected = tf.tensor3d([ [[1.0, 2.0, 3.0], [0.0, 0.0, 0.0], [0.0, 0.0, 0.0], [4.0, 5.0, 6.0]], [[3.5, 4.0, 4.5], [0.0, 0.0, 0.0], [0.0, 0.0, 0.0], [5.0, 5.5, 6.0]], [[3.5, 4.0, 4.5], [0.0, 0.0, 0.0], [0.0, 0.0, 0.0], [5.0, 5.5, 6.0]], [ [13.0, 14.0, 15.0], [0.0, 0.0, 0.0], [0.0, 0.0, 0.0], [16.0, 17.0, 18.0] ] ]); expectArraysClose(output, expected); }); it('color: same size', function () { var input = tf.tensor3d([ [ [115.11029815673828, 111.90936279296875, 66.87433624267578], [72.03849029541016, 81.86637878417969, 119.53585815429688] ], [ [68.555419921875, 97.49642181396484, 116.90741729736328], [128.69467163085938, 86.78314208984375, 104.3116683959961] ] ]); var dy = tf.tensor3d([ [[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]], [[7.0, 8.0, 9.0], [10.0, 11.0, 12.0]] ]); var size = [2, 2]; var alignCorners = false; var g = tf.grad(function (i) { return tf.image.resizeBilinear(i, size, alignCorners); }); var output = g(input, dy); var expected = tf.tensor3d([ [[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]], [[7.0, 8.0, 9.0], [10.0, 11.0, 12.0]] ]); expectArraysClose(output, expected); }); it('color: same size, align corners', function () { var input = tf.tensor3d([ [ [115.11029815673828, 111.90936279296875, 66.87433624267578], [72.03849029541016, 81.86637878417969, 119.53585815429688] ], [ [68.555419921875, 97.49642181396484, 116.90741729736328], [128.69467163085938, 86.78314208984375, 104.3116683959961] ] ]); var dy = tf.tensor3d([ [[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]], [[7.0, 8.0, 9.0], [10.0, 11.0, 12.0]] ]); var size = [2, 2]; var alignCorners = true; var g = tf.grad(function (i) { return tf.image.resizeBilinear(i, size, alignCorners); }); var output = g(input, dy); var expected = tf.tensor3d([ [[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]], [[7.0, 8.0, 9.0], [10.0, 11.0, 12.0]] ]); expectArraysClose(output, expected); }); }); //# sourceMappingURL=resize_bilinear_test.js.map