如何使用 tf.loadLayersModel() 从 express 加载 tensorflow-js 权重?
How to load tensorflow-js weights from express using tf.loadLayersModel()?
当我尝试将 tf-js 模型加载到 Reactjs 时出现错误 - RangeError: attempting to construct out-of-bounds TypedArray on ArrayBuffer
。
我正在使用 express.js 发送 json+bin 文件进行反应,以便我可以 运行 在浏览器本身中进行推理。
这是相关的 Express.js 代码。 json+bin 文件都在同一个文件夹中。
app.use(
"/api/pokeml/classify",
express.static(path.join(__dirname, "classifier_models/original/model.json"))
)
这是我在 React 中加载它的方式 -
import * as tf from "@tensorflow/tfjs"
useEffect(() => {
async function fetchModel() {
// const mobileNetModel = await mobilenet.load()
// const classifierModel = await axios.get("api/pokeml/classify")
const classifierModel = await tf.loadLayersModel(
"http://localhost:3001/api/pokeml/classify"
)
setModel(classifierModel)
}
fetchModel()
}, [])
model.json 文件正确加载,但碎片不正确 -
分片来自您用于调用模型的同一端点,因此一旦您拥有 model.json
,它就会返回到当前无法访问的 api/pokeml/group1-shard2of2.bin
。
所以,
app.use(
"/api/pokeml/classify",
express.static(path.join(__dirname, "classifier_models/original/model.json"))
);
// add this,
// to allow access to the `original` folder from `api/pokeml` for
// the shards to be accessible
app.use(
"/api/pokeml",
express.static(path.join(__dirname, "classifier_models/original"))
);
如果仍然不能解决您的问题,您可以尝试替换 sandbox 中的 model/shards。这将允许您检测您的模型是否格式错误。
当我尝试将 tf-js 模型加载到 Reactjs 时出现错误 - RangeError: attempting to construct out-of-bounds TypedArray on ArrayBuffer
。
我正在使用 express.js 发送 json+bin 文件进行反应,以便我可以 运行 在浏览器本身中进行推理。
这是相关的 Express.js 代码。 json+bin 文件都在同一个文件夹中。
app.use(
"/api/pokeml/classify",
express.static(path.join(__dirname, "classifier_models/original/model.json"))
)
这是我在 React 中加载它的方式 -
import * as tf from "@tensorflow/tfjs"
useEffect(() => {
async function fetchModel() {
// const mobileNetModel = await mobilenet.load()
// const classifierModel = await axios.get("api/pokeml/classify")
const classifierModel = await tf.loadLayersModel(
"http://localhost:3001/api/pokeml/classify"
)
setModel(classifierModel)
}
fetchModel()
}, [])
model.json 文件正确加载,但碎片不正确 -
分片来自您用于调用模型的同一端点,因此一旦您拥有 model.json
,它就会返回到当前无法访问的 api/pokeml/group1-shard2of2.bin
。
所以,
app.use(
"/api/pokeml/classify",
express.static(path.join(__dirname, "classifier_models/original/model.json"))
);
// add this,
// to allow access to the `original` folder from `api/pokeml` for
// the shards to be accessible
app.use(
"/api/pokeml",
express.static(path.join(__dirname, "classifier_models/original"))
);
如果仍然不能解决您的问题,您可以尝试替换 sandbox 中的 model/shards。这将允许您检测您的模型是否格式错误。