我刚刚完成了TensorFlow for Poets 2:TFLite教程(https://codelabs.developers.google.com/codelabs/tensorflow-for-poets-2-tflite/#0)。在本教程结束时,我能够在手机上运行教程中提供的MobileNet。
现在我正在尝试使用MobileNet从教程中替换MobileNet,我使用Tensorflow存储库中的MobileNet从头开始训练。但是,在尝试使用TOCO时,我遇到了分段错误。如果我使用optimize_for_inference
,我会收到类似
警告:tensorflow:对于节点MobilenetV1 / Conv2d_0 / BatchNorm / FusedBatchNorm
,mean,found(0,),expected(32,)的形状不正确警告:tensorflow:未找到预期的Conv2D输入到' MobilenetV1 / Conv2d_1_depthwise / BatchNorm / FusedBatchNorm'
我将教程中的pb文件图表与存储库中的图表进行了比较,我注意到批处理规范的表示方式存在差异。基本上,本教程提供的模型的批处理规范只有一个卷积后加一个,而存储库中的模型有一个FusedBatchNorm运算符。我也尝试设置fused=False
,但后来我收到了这个错误:
/opt/conda/lib/python3.6/site-packages/h5py /
__init__
。py:36:FutureWarning:将issubdtype的第二个参数从float
转换为{{1}不推荐使用。将来,它将被视为np.floating
。从._conv import register_converters as _register_converters
2018-05-09 11:51:38.419786:W tensorflow / contrib / lite / toco / toco_cmdline_flags.cc:178] - 不推荐使用--input_type。这是一个模糊的标志,设置了--input_data_types和--inference_input_type。如果您尝试使用有关输入数组类型的信息来补充输入文件,请使用--input_data_type。如果您尝试控制输出文件中实数输入数组的量化/反量化,请使用--inference_input_type。
2018-05-09 11:51:38.781372:I tensorflow / contrib / lite / toco / import_tensorflow.cc:1057]转换不支持的操作:SquaredDifference
2018-05-09 11:51:38.781693:I tensorflow / contrib / lite / toco / import_tensorflow.cc:1057]转换不支持的操作:SquaredDifference
2018-05-09 11:51:38.781864:I tensorflow / contrib / lite / toco / import_tensorflow.cc:1057]转换不支持的操作:SquaredDifference
2018-05-09 11:51:38.782019:I tensorflow / contrib / lite / toco / import_tensorflow.cc:1057]转换不支持的操作:SquaredDifference
2018-05-09 11:51:38.782181:I tensorflow / contrib / lite / toco / import_tensorflow.cc:1057]转换不支持的操作:SquaredDifference
2018-05-09 11:51:38.782329:I tensorflow / contrib / lite / toco / import_tensorflow.cc:1057]转换不支持的操作:SquaredDifference
2018-05-09 11:51:38.782508:I tensorflow / contrib / lite / toco / import_tensorflow.cc:1057]转换不支持的操作:SquaredDifference
2018-05-09 11:51:38.782663:I tensorflow / contrib / lite / toco / import_tensorflow.cc:1057]转换不支持的操作:SquaredDifference
2018-05-09 11:51:38.782851:I tensorflow / contrib / lite / toco / import_tensorflow.cc:1057]转换不支持的操作:SquaredDifference
2018-05-09 11:51:38.783009:I tensorflow / contrib / lite / toco / import_tensorflow.cc:1057]转换不支持的操作:SquaredDifference
2018-05-09 11:51:38.783211:I tensorflow / contrib / lite / toco / import_tensorflow.cc:1057]转换不支持的操作:SquaredDifference
2018-05-09 11:51:38.783352:I tensorflow / contrib / lite / toco / import_tensorflow.cc:1057]转换不支持的操作:SquaredDifference
2018-05-09 11:51:38.783561:I tensorflow / contrib / lite / toco / import_tensorflow.cc:1057]转换不支持的操作:SquaredDifference
2018-05-09 11:51:38.832089:I tensorflow / contrib / lite / toco / graph_transformations / graph_transformations.cc:39]在一般图形转换之前:656个运算符,874个数组(0个量化)
2018-05-09 11:51:39.037810:I tensorflow / contrib / lite / toco / graph_transformations / graph_transformations.cc:39]一般图形转换后传递1:222运算符,435个数组(0量化)
2018-05-09 11:51:39.041366:I tensorflow / contrib / lite / toco / graph_transformations / graph_transformations.cc:39]在去量化图形转换之前:222个运算符,435个数组(0量化)
2018-05-09 11:51:39.044092:I tensorflow / contrib / lite / toco / allocate_transient_arrays.cc:313]总瞬态数组分配大小:4333824字节,理论最佳值:4333696字节。
2018-05-09 11:51:39.045179:F tensorflow / contrib / lite / toco / tflite / export.cc:303]标准TensorFlow Lite运行时不支持模型中的某些运算符。如果您有自定义实现,则可以使用--allow_custom_ops禁用此错误。以下是您需要自定义实现的运算符列表:Mean,RSQRT,SquaredDifference,Squeeze。
中止(核心倾销)
我假设可以使用TOCO或其他脚本将np.float64 == np.dtype(float).type
运算符转换为卷积/加法组合。真的吗?如果是这样,我在哪里可以找到转换脚本?
答案 0 :(得分:0)
无论已融合或未融合,TOCO都应自动折叠批处理规范。这是整体流程:
您可能会遇到不受支持的操作。为避免这种情况,请确保为转换提供正确的输入和输出。
希望有帮助!
答案 1 :(得分:-1)
TensorFlow lite自动融合BachNorm层,因为对于冻结图,Bach规范参数是恒定的。 最好尝试tf2夜间版