Python TensorFlow.js-使用预训练的ResNet50网络

Python TensorFlow.js-使用预训练的ResNet50网络,python,tensorflow,keras,tensorflow.js,Python,Tensorflow,Keras,Tensorflow.js,我在Python中通过Keras API使用TensorFlow创建了一个神经网络,该网络利用ResNet50预训练网络能够对133种不同的狗进行分类 我现在希望能够部署这个模型,以便通过TensorFlow.js使用它,但是我在让ResNet50工作时遇到了困难。我能够毫无问题地将我从头创建的NN传输到TensorFlow.js,但使用预训练网络传输NN并不那么简单 下面是我正在尝试调整的Python代码: from keras.applications.resnet50 import Res

我在Python中通过Keras API使用TensorFlow创建了一个神经网络,该网络利用
ResNet50
预训练网络能够对133种不同的狗进行分类

我现在希望能够部署这个模型,以便通过TensorFlow.js使用它,但是我在让
ResNet50
工作时遇到了困难。我能够毫无问题地将我从头创建的NN传输到TensorFlow.js,但使用预训练网络传输NN并不那么简单

下面是我正在尝试调整的Python代码:

from keras.applications.resnet50 import ResNet50
ResNet50_model = ResNet50(weights="imagenet") # download ImageNet challenge weights

def extractResNet50(tensor): # tensor shape is (1, 224, 224, 3)
    return ResNet50(weights='imagenet', include_top=False, pooling="avg").predict(preprocess_input(tensor))

def dogBreed(img_path):
    tensor = convertToTensor(img_path) # I can do this in TF.js already with no issue

    resnetTensor = extractResNet50(tensor) # tensor returned in shape (1, 2048)
    resnetTensor = np.expand_dims(resnetTensor, axis=0) # repeat this line 2 more times to get shape (1, 1, 1, 1, 2048)

    # code below I can convert to TF.js without issue
    prediction = model.predict(resnetTensor[0])

除了
dogbride()
中的第1行和第4行代码外,我如何将以上所有内容转换为TensorFlow.js中使用的内容?

Resnet是一个如此庞大的网络,它还没有在浏览器上导入,我怀疑它是否有一天会被导入。至少与tensorflowJs的最新版本不同(版本0.14

另一方面,您可以做的一件事是保存Python keras模型,然后在Js上导入冻结的模型进行预测

更新: 您正在使用resnet50作为模型的功能提取器。在这种情况下,要保存的冻结模型需要同时包含Resnet50和模型拓扑和权重

1-不要在python中使用两个独立的体系结构,而是直接使用tensorflow而不是keras创建一个网络。然后冻结的模型将包含Resnet。这可能无法在浏览器中正常工作,因为Resnet的大小相当大(我自己没有测试过)


2——而不是在浏览器中使用ReNETE,考虑使用<代码> COCOSSD 或<代码> MaseNeNET>代码>,可以在浏览器中作为特征提取器使用。您可以在

上看到如何使用它们,这很有意义。但是,我已经尝试只导入模型和权重,但问题是模型的输入形状是ResNet50的输出形状
(1,1,12048)
。这是一个不寻常的形状,试图重塑一个形象,以。我如何将尺寸为100x100px的彩色图像(因此形状是
(1100,100,3)
)重塑为
(1,1,12048)
?我编辑了我的问题。希望它能给你一些关于如何实现你想要的东西的见解