Преобразование модели тензорного потока в модель coreml в Windows вызывает проблемы
У меня проблемы с преобразованием пользовательской модели TF. Модель выглядит так:
и после преобразования (без ошибок) это выглядит так:
Где находится оператор добавления?
Другая проблема заключается в том, что вывод преобразования дал мне это:
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).