还原预先训练的模型时,我可以使用tf.assign
和tf.get_collection(tf.GraphKeys.GLOBAL_VARIABLES)
将新值分配给张量:
>>>sess.run(tf.assign([v for v in tf.get_collection(tf.GraphKeys.GLOBAL_VARIABLES) if v.name == 'LAYER_NAME'][0], New_Value_FOR_LAYER_NAME))
但是,如果冻结的模型(.pb
)文件的所有变量均为const
格式,则使用tf.assign
和tf.get_default_graph().get_operations()
的等效文件不会产生任何结果:
>>>sess.run(tf.assign([v for v in tf.get_default_graph().get_operations() if v.name == 'LAYER_NAME'][0], New_Value_FOR_LAYER_NAME))
。
我认为根本原因是预先训练的模型有tf.Tensor而冻结的模型有tf.Operation:
>>>[v for v in tf.get_default_graph().get_operations() if v.name == 'softmax/weights_quint8_const']
[<tf.Operation 'softmax/weights_quint8_const' type=Const>]
然后,在冻结模型中为tf.Operation分配新值的正确方法是什么。