在javascript中从本地文件系统加载Tensorflow js模型
我已将keras模型转换为tensorflow json格式,并将其本地保存在我的计算机中。我试图使用下面的命令在javascript代码中加载json模型在javascript中从本地文件系统加载Tensorflow js模型,javascript,tensorflow,tensorflow.js,Javascript,Tensorflow,Tensorflow.js,我已将keras模型转换为tensorflow json格式,并将其本地保存在我的计算机中。我试图使用下面的命令在javascript代码中加载json模型 model = await tf.loadModel('web_model') 但是模型没有加载。 有没有办法从本地文件系统加载tensorflow json模型?您可以尝试: const model = await tf.models.modelFromJSON(myModelJSON) 查看我们的装载模型文档: 您可以使用tf.lo
model = await tf.loadModel('web_model')
但是模型没有加载。
有没有办法从本地文件系统加载tensorflow json模型?您可以尝试:
const model = await tf.models.modelFromJSON(myModelJSON)
查看我们的装载模型文档: 您可以使用
tf.loadModel
获取一个字符串,该字符串是指向需要通过HTTP提供服务的模型定义的URL。这意味着您需要启动一个http服务器来服务这些文件(由于CORS,它将不允许您向文件系统发出请求)
此软件包可以为您做到这一点:
LoadModel
在引擎盖下使用fetch
。和fetch无法直接访问本地文件。它用于获取服务器提供的文件。更多关于这个。
要使用浏览器加载本地文件,有两种方法,要求用户使用
<input type="file"/>
js
const uploadJSONInput = document.getElementById('upload-json');
const uploadWeightsInput = document.getElementById('upload-weights');
const model = await tfl.loadModel(tf.io.browserFiles(
[uploadJSONInput.files[0], uploadWeightsInput.files[0]]));
npm install http-server -g
在目录中,可以运行以下命令来启动服务器:
http-server -c1 --cors .
现在可以加载模型:
// load model in js script
(async () => {
...
const model = await tf.loadFrozenModel('http://localhost:8080/model.pb', 'http://localhost:8080/weights.json')
})()
我知道您正试图在浏览器中加载模型,但如果有人在节点中尝试加载模型,请按以下方法操作:
const tf = require("@tensorflow/tfjs");
const tfn = require("@tensorflow/tfjs-node");
const handler = tfn.io.fileSystem("./path/to/your/model.json");
const model = await tf.loadLayersModel(handler);
这在node中对我有效。多亏了
jafaircl
您可以使用不安全的chrome实例:
C:\Program Files (x86)\Google\Chrome\Application>chrome.exe --disable-web-security --disable-gpu --user-data-dir=C:/Temp
然后您可以添加此脚本来重新定义fetch函数
async function fetch(url) {
return new Promise(function(resolve, reject) {
var xhr = new XMLHttpRequest
xhr.onload = function() {
resolve(new Response(xhr.responseText, {status: 200}))
}
xhr.onerror = function() {
reject(new TypeError('Local request failed'))
}
xhr.open('GET', url)
xhr.send(null)
})
}
在此之后,舒尔建议您使用正确的型号加载器
但您的权重将不正确-据我所知,存在一些编码问题。如果您试图在服务器端加载它,请使用
@tensorflow/tfjs节点
而不是@tensorflow/tfjs
,并更新到0.2.1
或更高版本以解决此问题。我正在使用React js加载模型(用于图像分类和更多机器学习内容)
Tensorflow.js不支持Api来读取以前训练过的模型
const file=new Blob()
file.src=modelJSON
const files=new Blob()
files.src=modelWeights
console.log(文件)
const model=wait tf.loadLayersModel(tf.io.browserFiles([file,files]);
[![在此处输入图像描述][1][1]
如果您使用web应用程序(对于tensorflow.lite,您可以使用opencv.readTensorflowmodel(model.pb,weight.pbtxt),则可以在Express.js中创建一个APi来为您的模型(model.json和weigths.bin)提供服务器
参考资料:
const classifierModel=wait tf.loadLayersModel(
"https://rp5u7.sse.codesandbox.io/api/pokeml/classify"
);
常量im=新图像()
im.src=imagessample/'../../../../../../Models/shapeClassification/Samples/images(2.png');
const abc=此预处理图像(im);
const preds=await classifierModel.predict(abc)/.argMax(-1);
log(“”,preds,'Principal',preds.shape[0],'DATA',preds.dataSync())
const responde=[…preds.dataSync()]
log('Maxmimo Valor',Math.max.apply(Math,response.map(函数(o){return o;})))
设indiceMax=this.indexOfMax(响应)
console.log(indiceMax)
console.log(“”,this.labelReturn(indiceMax))
如果您正在使用Django,您应该:
var modelPath = "{% static 'sampleModel.json' %}">
<script>model = await tf.loadGraphModel(modelPath)</script>
var modelPath = "{% static 'sampleModel.json' %}">
<script>model = await tf.loadGraphModel(modelPath)</script>
model=wait tf.loadGraphModel(modelPath)
我猜您不是从开发服务器上提供服务?使用浏览器打开html文件会导致用于获取文件的xhr请求出现问题。也许可以尝试一下。我刚刚开始探索tensorflow js,并使用浏览器测试内容。非常感谢您的帮助。但是,在尝试在mo中加载文件时,我遇到了以下错误del Uncaught(承诺中)TypeError:未能在“FileReader”上执行“readAsText”:参数1不是“Blob”类型。可能,您必须在使用事件侦听器加载文件后读取该文件。您无法使用
modelFromJSON
<script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs"></script>
<script>model = await tf.loadGraphModel(modelPath)</script>