Преобразование модели Keras в TFJS: разные веса - PullRequest
1 голос
/ 17 октября 2019

Я преобразовал модель Keras .H5 в модель слоев TFJS, чтобы сделать вывод на сервере Node JS, и замечаю дико разные результаты между ними. Эта модель используется для классификации изображений и использует слегка измененную архитектуру Xception. И model.summary () для Python, и model.summary () для TFJS совпадают, поэтому кажется, что преобразование архитектуры прошло успешно.

После более подробного изучения весовые коэффициенты для первого слоя модели полностью различаются между двумя, что объясняет разные результаты. тензор входного изображения согласован между обоими, что означает, что проблема должна быть связана с весами.

Здесь является ссылкой на сравнение весов того же слоя в 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, и яиспользовал Tensorflow 1.14 под Python 3.7 для конвертации модели. Вот код, который я использовал для преобразования модели:

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.

...