tensorflow / tfjs-wechat

WeChat Mini-program plugin for TensorFlow.js
https://tensorflow.org/js
552 stars 104 forks source link

Output of MaxPooling2d not as expected on some Android devices with input tensor of certain shape. #128

Open 109021017 opened 2 years ago

109021017 commented 2 years ago

TensorFlow.js version: 3.18.0 tfjs-wechat plugin version: 0.2.0 WeChat version: 8.0.18 WeChat base API version: 3.4.6 WeChat IDE version: 1.0.5

Strange output of MaxPooling2d on some Android Devices (tested on Google Pixel 3XL and Samsung Galaxy S20) only with webgl backend.

let zeroTensor= tf.zeros([1, 4, 110, 2], 'float32');
let maxPool = tfl.layers.maxPool2d({
        poolSize: [2, 2],
        strides: [2, 2]
    }); 
let tensorAfterPooling = maxPool.apply(zeroTensor) as tf.Tensor;
console.log(tf.min(tensorAfterPooling).dataSync()[0], tf.max(tensorAfterPooling).dataSync()[0])

output expected: 0 0 output: -65503.99609375 0

pyu10055 commented 2 years ago

This looks like it is overflowing, are you using float32 texture or float16 texture?

109021017 commented 2 years ago

This looks like it is overflowing, are you using float32 texture or float16 texture?

console.log(tf.ENV.getBool('WEBGL_RENDER_FLOAT32_CAPABLE')) true console.log(tf.ENV.getBool('WEBGL_RENDER_FLOAT32_ENABLED')) true

but after I tf.ENV.set("WEBGL_RENDER_FLOAT32_ENABLED", false) the output is still wrong.

109021017 commented 2 years ago

While on iPhone which produce the right result, the WEBGL_RENDER_FLOAT32_CAPABLE and WEBGL_RENDER_FLOAT32_ENABLED is always false.