我在转换自定义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)
有人可以回答我的问题,也许告诉我我做错了吗?
Thx
答案 0 :(得分:1)
后跟加号的MatMul与innerProduct运算符相同。
请注意,innerProduct层具有“偏差”。如果查看这些偏差值,就会发现它们与“添加”运算符中使用的值相同。因此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)。