首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TensorFlow JS -将最小/最大值与模型一起保存,并在预测数据旁边重新加载

TensorFlow JS -将最小/最大值与模型一起保存,并在预测数据旁边重新加载
EN

Stack Overflow用户
提问于 2020-09-16 16:41:21
回答 1查看 135关注 0票数 1

我正在使用TensorFlow JS构建ML模型。JS和ML的新手。我有一个可以做出合理预测的工作模型。然而,当我保存模型并将其加载到客户端UI中时,我还需要原始的最小/最大值来归一化到相同的量(我认为这是正确的,否则我不会得到相同的预测,因为这些值将是不同的)。我试着将最小/最大值作为单独的张量值带回来,然后带回完整的张量,以便能够循环并找到最小/最大值。我还尝试将最小最大值硬编码为数字和对象。

我可以看到张量,但不能访问min或max。这意味着我在尝试预测时会出现NaN错误。我对此还是个新手,我想这显然是我遗漏的东西。任何帮助都将不胜感激。慢慢地失去了情节,试图找出我哪里错了。

代码语言:javascript
复制
//saving tensor normalisedFeature to later access min/max used 

    function downloadJ() {

            let values = {
                normalisedFeature
            }
            let json = JSON.stringify(values);
            //Convert JSON string to BLOB.
            json = [json];
            let blob1 = new Blob(json, { data:"text/json;charset=utf-8" }); 
            

            let url = window.URL || window.webkitURL;
            link = url.createObjectURL(blob1);
            let a = document.createElement("a");
            a.download = "tValues.json";
            a.href = link;
            document.body.appendChild(a);
            a.click();
            document.body.removeChild(a);
        }


//loading up tensor saved values
let normalisedFeatureJ = {};
    $.ajax({
        url: "model/tValues.json",
        async: false,
        dataType: 'json',
        success: function(data) {
            normalisedFeatureJ = (data);
        }
    });
console.log(Object.values(normalisedFeatureJ));

//tried dataSync();, looping, parsing etc. Can't get anything to let me access min/max


//json file looks like: 
{"normalisedFeature":
    {"tensor": {"isDisposedInternal":false,"shape":[10000,17],"dtype":"float32","size":170000,"strides":[17],"dataId":{},"id":28,"rankType":"2"},
            "min":{"isDisposedInternal":false,"shape":[],"dtype":"float32","size":1,"strides":[],"dataId":{},"id":6,"rankType":"0"},
                "max":{"isDisposedInternal":false,"shape":[],"dtype":"float32","size":1,"strides":[],"dataId":{},"id":16,"rankType":"0"}}}



//normalise and denormalise functions using tensor maths
function normalise(tensor, previousMin = null, previousMax = null) {
        const min = previousMin || tensor.min();
        console.log("tensor min for normalised is :" + tensor.min());
        const max = previousMax || tensor.max();
        console.log("tensor max for normalised is :" + tensor.max());

        const normalisedTensor = tensor.sub(min).div(max.sub(min));
       // const normalisedTensor = (tensor-min)/(max-min);
        return {
            tensor: normalisedTensor,
            min,
            max
        };
    }

    function denormalise(tensor, min, max) {
        console.log("tensor min for denormalised is :" + min);
        console.log("tensor max for denormalised is :" + max);
        const denormalisedTensor = tensor.mul(max.sub(min)).add(min);
        return denormalisedTensor;
    }

我也试着在不使用张量数学的情况下完成数学,但那是一团乱麻:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-21 04:35:25

JSON文件包含张量元数据,但不包含数据本身。在downloadJ中,改为通过以下方式定义values

代码语言:javascript
复制
let values = {
  tensor: {
    shape: normalisedFeature.tensor.shape,
    data: normalisedFeature.tensor.dataSync()
  },
  min: normalisedFeature.min.dataSync()[0],
  max: normalisedFeature.max.dataSync()[0]
};

JSON将如下所示

代码语言:javascript
复制
{
  "tensor": {
    "shape": [
      10000,
      17
    ],
    "data": {
      "0": 0.6050498485565186,
      ...
      "169999": 0.055848438292741776
    }
  },
  "min": -43.01580047607422,
  "max": 727.2080078125
}

它包含加载模型时所需的最小值和最大值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63916308

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档