1

我已经将 Keras .H5 模型转换为 TFJS 层模型以在 Node JS 服务器上进行推断,并且注意到两者之间的结果截然不同。该模型用于图像分类,并使用稍微修改的 Xception 架构。Python 的model.summary ()TFJS 的 model.summary()都匹配,看来架构的转换是成功的。

在进一步研究之后,模型第一层的权重在两者之间完全不同,这可以解释不同的结果。输入图像张量在两者之间是一致的,这意味着问题应该出在权重上。

是TFJS和Keras中同一层权重比较的链接...

我将我的 Express HTTP 文件服务器的输出设置为详细,以检查是否所有的权重文件都被获取,我注意到它们都被获取了,但是以不连续的顺序:

GET /model.json 200 91907 - 6.784 ms
GET /group1-shard20of20.bin 200 3770536 - 32.671 ms
GET /group1-shard4of20.bin 200 4194304 - 26.951 ms
GET /group1-shard7of20.bin 200 4194304 - 26.805 ms
GET /group1-shard14of20.bin 200 4194304 - 24.868 ms
GET /group1-shard10of20.bin 200 4194304 - 27.278 ms
GET /group1-shard1of20.bin 200 4194304 - 24.847 ms
GET /group1-shard16of20.bin 200 4194304 - 24.827 ms
GET /group1-shard11of20.bin 200 4194304 - 27.032 ms
GET /group1-shard19of20.bin 200 4194304 - 25.132 ms
GET /group1-shard17of20.bin 200 4194304 - 25.369 ms
GET /group1-shard8of20.bin 200 4194304 - 24.850 ms
GET /group1-shard6of20.bin 200 4194304 - 26.229 ms
GET /group1-shard3of20.bin 200 4194304 - 26.584 ms
GET /group1-shard12of20.bin 200 4194304 - 26.231 ms
GET /group1-shard9of20.bin 200 4194304 - 26.123 ms
GET /group1-shard5of20.bin 200 4194304 - 25.837 ms
GET /group1-shard2of20.bin 200 4194304 - 27.055 ms
GET /group1-shard13of20.bin 200 4194304 - 26.368 ms
GET /group1-shard15of20.bin 200 4194304 - 26.650 ms
GET /group1-shard18of20.bin 200 4194304 - 33.848 ms

这可能是为什么我的权重不正常并且与 Keras 模型的原始权重不一致的原因吗?

我注意到大约一年前出现了一些类似的问题,但该错误已被确定,Tensorflow 的更新为这些人解决了该问题。

我正在使用 Tensorflow JS 1.2.11 在 Node JS v10.16.3 服务器上加载模型,并在 Python 3.7 下使用 Tensorflow 1.14 来转换模型。这是我用来转换模型的代码:

tfjs.converters.save_keras_model(model, path)

这就是我将模型加载到 TFJS 中的方式:

model = await tf.loadLayersModel('http://127.0.0.1:3001/model.json');

感谢您的时间和专业知识,

model.getWeights()[0].print();
Tensor
    [[0.0063044 , 0.0171392 ],
     [0.0730571 , -0.0162974],
     [-0.0392024, 0.0501709 ],
     ...,
     [0.0321253 , 0.0204812 ],
     [-0.045588 , -0.0343406],
     [0.0232343 , -0.0127071]]

Python:
>>> nn.get_weights()[0]
array([[[[ 4.01871502e-01,  6.77069500e-02, -9.92160812e-02,
          -2.40881741e-01,  4.94409263e-01, -1.35092044e+00,
          -7.53455386e-02, -1.15802072e-01,  2.54089713e-01,
           4.12381589e-01, -2.02945337e-01, -5.65736771e-01,
           ...

如果有帮助,这里是 Python 和 TFJS 模型文件的链接。

4

0 回答 0