将Keras模型转换为TFJS:权重不同

时间:2019-10-17 20:50:53

标签: tensorflow keras tensorflow.js tensorflowjs-converter

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

进一步研究之后,模型第一层的权重在两者之间完全不同,这可以解释不同的结果。 input image tensor在两者之间是一致的,这意味着问题应该在于权重。

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

我将Express HTTP文件服务器的输出设置为“ verbose”,以检查是否已获取所有重量文件,但我注意到它们均已被获取,但顺序不定:

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模型的原始重量不一致吗?

大约一年前,我注意到类似的issues出现了,但是发现了该错误,并且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,
           ...

如果有帮助,here是指向Python和TFJS模型文件的链接。

0 个答案:

没有答案