我有一个(训练后的)tf.keras模型,我想转换为量化模型并使用tensorflow的伪量化策略(使用python作为前端)进行重新训练。
我可以以某种方式将tf.contrib.quantize.create_training_graph直接应用于keras模型(图),然后重新训练吗? 从K.get_session()。graph提取图形时,似乎已经创建了会话,这似乎存在一些问题。
例如,以下方法:
import tensorflow.contrib.lite as tflite
keras_graph = tf.keras.backend.get_session().graph
from tensorflow.contrib.quantize import create_training_graph
create_training_graph(input_graph=keras_graph,
quant_delay=int(0*(len(X_train) / batch_size)))
...
model.compile(...)
model.fit_generator(...)
显示以下消息: “操作'{name:'act_softmax / sub'id:2294 op device:{} def:{{{node act_softmax / sub}} = Sub [T = DT_FLOAT](conv_preds / act_quant / FakeQuantWithMinMaxVars:0,act_softmax / Max) }}'已通过在会话运行后更新输入张量进行了更改。此突变将不起作用,并且将来会触发错误。要么在运行它们后不修改节点,要么创建新会话”
确实,错误: tensorflow.python.framework.errors_impl.FailedPreconditionError:尝试使用未初始化的值conv_preds / act_quant / conv_preds / act_quant / max / biased
(即create_training_graph在创建会话之前需要该图吗?是否可以在实例化会话之前从keras模型中获取该图?)
或者,如果这不起作用,我可以将(h5)模型转换为检查点,然后以某种方式将模型从该检查点加载到张量流图并继续使用纯张量流吗?
将感谢您的帮助或指点。 谢谢!