#javascript #async-await #local-storage #tensorflow.js
#javascript #асинхронный-ожидание #local-storage #tensorflow.js
Вопрос:
Итак, в настоящее время я пытаюсь использовать асинхронную функцию, поэтому извлекаю файл из каталога проекта и устанавливаю его в локальное хранилище. У tensorflow.js функция loadLayersModel() извлекает файл из локального хранилища и загружает его в переменную с именем «model».
async function tensorFlow() {
let response = await fetch("./AI-Model/model.json")
console.log(response);
var data = await response.json();
console.log("DATA: " JSON.stringify(data));
await localStorage.setItem('saved_model', JSON.stringify(data));
const model = await tf.loadLayersModel('localstorage://saved_model');
}
Я могу просмотреть через инструменты разработчика в Chrome, что данные правильно присваиваются localstorage, однако при вызове loadLayersModel() я получаю следующую ошибку.
local_storage.js:208 Uncaught (in promise) Error: In local storage, there is no model with name 'saved_model'
Я подозреваю, что localStorage.setItem вызывается после loadLayersModel() . Но даже после того, как программа назначает saved_model локальному хранилищу, она по-прежнему не распознает, что saved_model находится в локальном хранилище. Я не могу понять, почему это происходит, и я ищу способ загрузить мою модель слоев через мой каталог проекта, чтобы мне не нужно было настраивать веб-сервер.
Ответ №1:
Ваша проблема связана с тем, как вы извлекаете данные, а также обратите внимание, что все localStorage
вызовы являются синхронными.
localStorage.setItem('saved_model', JSON.stringify(data));
const modelFromLocalStorage = localStorage.getItem('saved_model');
const JSONSavedModel = JSON.parse(modelFromLocalStorage)
const model = await tf.loadLayersModel(JSONSavedModel);
Комментарии:
1. Теперь я получаю эту ошибку @yudhiesh
Uncaught (in promise) Error: Cannot proceed with model loading because the IOHandler provided does not have the load method implemented.
Ответ №2:
loadLayersModel
может сам загружать модель через http (ы). Это удобно, поскольку может потребоваться также загружать файлы веса.
Аналогично, использование model.save
не только сохраняет модель, но и веса.
Позже модель может быть сохранена (соответственно извлечена) в (соответственно из) localstorage.
await model = tf.loadLayersModel('url/of/model') // here url is './AI-Model/model.json'
// save the model to localstorage
await model.save('localstorage://name-of-model');
// later retrieved the model
await tf.loadLayersModel('localstorage://name-of-model');