Преобразование модели тензорного потока в модель coreml в Windows вызывает проблемы

У меня проблемы с преобразованием пользовательской модели TF. Модель выглядит так:модель тензорного потока

и после преобразования (без ошибок) это выглядит так:

модель coreml

Где находится оператор добавления?

Другая проблема заключается в том, что вывод преобразования дал мне это:

Core ML input(s):
[name: "x_placeholder__0"
type {
  multiArrayType {
    shape: 41
    dataType: DOUBLE
  }
}
]
Core ML output(s):
[name: "softmax_prediction__0"
type {
  multiArrayType {
    shape: 2
    dataType: DOUBLE
  }
}
]

Но моя модель имеет только значения с плавающей запятой? (преобразование действительно изменило его с float32 на float64)

Может кто-нибудь ответить на мои вопросы и, возможно, сказать мне, что я делаю не так?

Спасибо

1 ответ

MatMul с последующим добавлением - это то же самое, что и оператор innerProduct.

Обратите внимание, что слой innerProduct имеет "смещение". Если вы посмотрите на эти значения смещения, то увидите, что это те же значения, которые используются в вашем операторе Add. Таким образом, coremltools / tf-coreml просто объединил эти две операции в один слой.

Тип данных по умолчанию для объектов MLMultiArray - DOUBLE. Вы можете изменить это на FLOAT, но это не обязательно будет быстрее. Вот как вы могли бы сделать это в Python:

import coremltools  
import sys  

def update_multiarray_to_float32(feature):  
    if feature.type.HasField('multiArrayType'):  
        import coremltools.proto.FeatureTypes_pb2 as _ft  
        feature.type.multiArrayType.dataType = _ft.ArrayFeatureType.FLOAT32  

if __name__ == "__main__":  
    if len(sys.argv) != 3:  
        print "USAGE: %s <input_model_path> <output_model_path>" % sys.argv[0]  
        sys.exit(1)  

    input_model_path = sys.argv[1]  
    output_model_path = sys.argv[2]  

    spec = coremltools.utils.load_spec(input_model_path)  

    for input_feature in spec.description.input:  
        update_multiarray_to_float32(input_feature)  

    for output_feature in spec.description.output:  
        update_multiarray_to_float32(output_feature)  

    coremltools.utils.save_spec(spec, output_model_path)  

Сценарий предоставлен дружелюбным сотрудником Apple (см. https://forums.developer.apple.com/thread/84401).

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