我想在使用宗地构建的Web应用程序中提供tensorflow.js模型,类似于https://github.com/googlecreativelab/teachablemachine-community/tree/master/libraries/image。
我有一个run.js文件和一个run.html以及一个带有model.json,metadata.json和weights.bin的文件夹(model1)。我把这一切与包裹捆绑在一起。 问题是,当我导入model.json,metadata.json和weights.bin文件时,它们会被解析,无法使用。
我希望它们采用“文件”格式。 我可以通过将文件加载到html的元素中来实现此目的,但是我想将模型交给用户。
run.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<div>Teachable Machine Image Model Local</div>
<button type="button" id="loadmodel">Load Model 1</button>
<button type="button" id="run">Start</button>
<input type="file" id="lm1">Model</input>
<input type="file" id="lmd1">Metadata</input>
<input type="file" id="lw1">Weights</input>
<script src="./run.js"></script>
</body>
</html>
run.js:
import localmodel1 from "./model1/model.json";
import localmeta1 from "./model1/metadata.json";
import localweights1 from "./model1/weights.bin";
const textFile = fs.readFileSync(__dirname + "/model1/weights.bin", "utf8");
console.log(textFile);
localModel = localmodel1;
localMetadata = localmeta1;
localWeights = localweights1;
/*
fs.readFile('./model1/weights.bin', function (err, bin) {
localweights1 = bin;
if (err) throw err;
});
*/
uploadModel = document.getElementById('lm1').files[0];
uploadMetadata = document.getElementById('lmd1').files[0];
uploadWeights = document.getElementById('lw1').files[0];
model = await tmImage.loadFromFiles(uploadModel, uploadWeights, uploadMetadata);
答案 0 :(得分:1)
loadFromFiles
需要文件类型的参数。因此,除了在用户选择文件时直接获取文件外,您无需执行其他直接通过宗地加载文件的操作。
相反,tf.loadLayersModel
从文件中加载模型。
模型文件需要放置在包裹提供的文件夹中。它们不必像模块一样导入。
const customModel = await tf.loadLayersModel(jsonUrl); // there is no need to specify weight file
另一方面,元数据可以作为打字稿文件导入
import metadataJSON from "./model1/metadata.json";
const model = new CustomMobileNet(customModel, metadataJSON); // CustomMobileNet needs to be imported