因此,我遵循了一些教程,将tensorflow模型(从tensorflow hub下载(转换为带有二进制和json文件的tfjs模型。当我尝试使用loadLayersModel()
时,它会抛出一个错误。当我尝试使用loadGraphModel()
时,它会加载并运行,但预测似乎不起作用,也没有任何意义。如何判断加载模型的方法?我需要一些关于如何排除故障的指导或一些推荐的工作流程,特别是在tensorflowJS中。我在React Native with expo项目中使用了这个。不确定这是否重要。
TensorflowHub:https://tfhub.dev/google/aiy/vision/classifier/food_V1/1
我的代码:
import * as tf from '@tensorflow/tfjs'
import { bundleResourceIO, decodeJpeg } from '@tensorflow/tfjs-react-native'
import * as FileSystem from 'expo-file-system';
const modelJSON = require('./TFJS/model.json')
const modelWeights = require('./TFJS/group1-shard1of1.bin')
export const loadModel = async () => {
const model = await tf.loadLayersModel(
bundleResourceIO(modelJSON, modelWeights)
).catch((e) => {
console.log("[LOADING ERROR] info:", e)
})
return model
}
export const transformImageToTensor = async (uri)=>{
//read the image as base64
const img64 = await FileSystem.readAsStringAsync(uri, {encoding:FileSystem.EncodingType.Base64})
const imgBuffer = tf.util.encodeString(img64, 'base64').buffer
const raw = new Uint8Array(imgBuffer)
let imgTensor = decodeJpeg(raw)
const scalar = tf.scalar(255)
//resize the image
imgTensor = tf.image.resizeNearestNeighbor(imgTensor, [192, 192])
//normalize; if a normalization layer is in the model, this step can be skipped
const tensorScaled = imgTensor.div(scalar)
//final shape of the rensor
const img = tf.reshape(tensorScaled, [1,192,192,3])
return img
}
export const getPredictions = async (image)=>{
await tf.ready()
const model = await loadModel()
const tensor_image = await transformImageToTensor(image)
// const predictions = await makePredictions(1, model, tensor_image)
const prediction = await model.predict(tensor_image)
console.log(prediction)
console.log(prediction.datasync()[0])
return prediction
}
如果它是一个层模型,那么您就要加载LayersModeland if its a graph model, you use 'loadGraphModel
——它们是不可交换的,并且您不能使用不同的方法加载模型。
因此,如果它使用loadGraphModel
加载,它就是一个图模型——就这么简单。
这些预测在中似乎不起作用或毫无意义
这没有帮助-你期望什么,实际得到什么?