Загрузите мобильную сеть (keras) в tensorflow.js

Я пытаюсь загрузить модель keras, основанную на мобильном телефоне, в Tensorflow.js. К сожалению, это не работает. Я создал модель со следующим кодом Python.


import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
import numpy as np
import tensorflowjs as tfjs 

input_shape = 224,224 #sorry of all lowercase
num_classes = 2

mobile_net = tf.keras.applications.MobileNetV2(
    input_shape=input_shape+(3,),
    alpha=1.0,
    include_top=False,
    weights = "imagenet",
    input_tensor=None,
    pooling=None,
    classes=2,
    classifier_activation = "softmax"
)
model = keras.Sequential(
    [
        keras.Input(shape=input_shape+(3,)),
        layers.Rescaling(1./255),
        mobile_net,
        layers.Flatten(),
        layers.Dense(num_classes, activation = "softmax")
    ]
)
        
model.build((None,)+input_shape+(3,))
tfjs.converters.save_keras_model(model,'./model.json')
print(model.summary())

после этого я пытаюсь загрузить модель в node.js REPL со следующими командами

const tf = require('@tensorflow/tfjs')
async function predict(){
   const model = await tf.loadLayersModel('file:///./model.json');
}
predict()

однако я получаю сообщение об ошибке.

Uncaught TypeError: fetch failed
    at Object.fetch (node:internal/deps/undici/undici:14294:11)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5) {
  cause: Error: not implemented... yet...
      at makeNetworkError (node:internal/deps/undici/undici:6789:35)
      at schemeFetch (node:internal/deps/undici/undici:13774:18)
      at node:internal/deps/undici/undici:13654:26
      at mainFetch (node:internal/deps/undici/undici:13671:11)
      at fetching (node:internal/deps/undici/undici:13628:7)
      at fetch2 (node:internal/deps/undici/undici:13506:20)
      at Object.fetch (node:internal/deps/undici/undici:14292:18)
      at fetch (node:internal/process/pre_execution:238:25)
      at PlatformNode.fetch (/Users/z003cyub/Documents/projects/FY2022/aufsteller/node_modules/@tensorflow/tfjs-core/dist/tf-core.node.js:7542:33)
      at HTTPRequest.<anonymous> (/Users/z003cyub/Documents/projects/FY2022/aufsteller/node_modules/@tensorflow/tfjs-core/dist/tf-core.node.js:8406:55) {
    [cause]: undefined

Я хотел бы обвинить в этом структуру модели, однако я получаю ту же ошибку с чертовски простой моделью.

model2 = keras.Sequential(
    [
        keras.Input(shape=input_shape+(3,)),
        layers.Conv2D(32, kernel_size=(3, 3), activation = "relu"),
        layers.MaxPooling2D(pool_size=(2, 2)),
        layers.Conv2D(64, kernel_size=(3, 3), activation = "relu"),
        layers.MaxPooling2D(pool_size=(2, 2)),
        layers.Flatten(),
        layers.Dropout(0.5),
        layers.Dense(num_classes, activation = "softmax"),
    ]
)
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
66
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

не проблема со слоями или моделью, скажем так, скорее проблема nodejs. последняя версия узла определяет глобальный fetch, но реализация еще не завершена, и в ней отсутствует поддержка file://. и tfjs будет использовать глобальную выборку, если она определена. попробуйте использовать node --no-experimental-fetch, чтобы глобальный fetch не был определен, и вместо этого tfjs будет использовать внутренние методы.

Другие вопросы по теме