我正在使用TensorFlow JS构建ML模型。JS和ML的新手。我有一个可以做出合理预测的工作模型。然而,当我保存模型并将其加载到客户端UI中时,我还需要原始的最小/最大值来归一化到相同的量(我认为这是正确的,否则我不会得到相同的预测,因为这些值将是不同的)。我试着将最小/最大值作为单独的张量值带回来,然后带回完整的张量,以便能够循环并找到最小/最大值。我还尝试将最小最大值硬编码为数字和对象。
我可以看到张量,但不能访问min或max。这意味着我在尝试预测时会出现NaN错误。我对此还是个新手,我想这显然是我遗漏的东西。任何帮助都将不胜感激。慢慢地失去了情节,试图找出我哪里错了。
//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;
}我也试着在不使用张量数学的情况下完成数学,但那是一团乱麻:)
发布于 2020-09-21 04:35:25
JSON文件包含张量元数据,但不包含数据本身。在downloadJ中,改为通过以下方式定义values
let values = {
tensor: {
shape: normalisedFeature.tensor.shape,
data: normalisedFeature.tensor.dataSync()
},
min: normalisedFeature.min.dataSync()[0],
max: normalisedFeature.max.dataSync()[0]
};JSON将如下所示
{
"tensor": {
"shape": [
10000,
17
],
"data": {
"0": 0.6050498485565186,
...
"169999": 0.055848438292741776
}
},
"min": -43.01580047607422,
"max": 727.2080078125
}它包含加载模型时所需的最小值和最大值。
https://stackoverflow.com/questions/63916308
复制相似问题