【问题标题】:Extract Embedding from GCMLE Saved Model从 GCMLE 保存的模型中提取嵌入
【发布时间】:2018-03-16 05:45:20
【问题描述】:

我正在尝试从本地经过训练的 GCMLE 预测模型下载嵌入,以便我可以使用我自己的自定义嵌入可视化,这些可视化在 tensorboard 中不可用。我想将这些嵌入提取到一个大的 numpy 矩阵中,但我在几个步骤中遇到了麻烦。我可以成功下载所有文件(saved_model.pb + assets/* + variables/*,并且我似乎能够使用以下代码恢复模型:

with tf.Session(graph=tf.Graph()) as sess:
    tf.saved_model.loader.load(sess,[tf.saved_model.tag_constants.SERVING], _EXPORT_DIR)

成功返回:

INFO:tensorflow:Restoring parameters from Servo/variables/variables

然后我尝试像这样提取权重:

constant_values = {}

with tf.Session(graph=tf.Graph()) as sess:
    tf.saved_model.loader.load(sess, [tf.saved_model.tag_constants.SERVING], _EXPORT_DIR)

    constant_ops = [op for op in sess.graph.get_operations() if op.type == "Const"]
    for constant_op in constant_ops:
        constant_values[constant_op.name] = sess.run(constant_op.outputs[0])

确实成功输出了很多,但与嵌入相关的唯一部分是:

u'embedding_layer/embeddings/Initializer/random_uniform/max': 0.012765553,
u'embedding_layer/embeddings/Initializer/random_uniform/min': -0.012765553,
u'embedding_layer/embeddings/Initializer/random_uniform/shape': array([vocab_size, word_embedding_size], dtype=int32)

并且没有实际嵌入权重的迹象。如何修改上面的方法以获得实际的嵌入权重矩阵?

【问题讨论】:

    标签: python tensorflow google-cloud-ml


    【解决方案1】:

    这在一定程度上取决于您导出模型的方式,但在大多数情况下,嵌入是变量而不是常量。所以你想要这样的东西:

    with tf.Session(graph=tf.Graph()) as sess:
        tf.saved_model.loader.load(sess, [tf.saved_model.tag_constants.SERVING], _EXPORT_DIR)
    
        trainable_coll = sess.graph.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES)
        vars = {v.name:sess.run(v.value()) for v in trainable_coll}
    

    【讨论】:

    • 非常整洁 - 这更有意义。我以为我已经读过它们都将成为 SERVING 的常量,但我想这是我编造的。我收到VARIABLES 已弃用的警告,并基于此:tensorflow.org/api_docs/python/tf/GraphKeys 我认为MODEL_VARIABLES 将具有“在模型中用于推理的对象子集”,但当我使用 MODEL_VARIABLES 时它是空的。有什么方法可以将其限制为推理变量?
    • 似乎 TRAINABLE_VARIABLES 将包含推理时所需的任何内容
    • TRAINABLE_VARIABLES 确实是正确的。我会更新帖子。
    • RE:常量,您可以“冻结”图形(将变量转换为常量),但目前这是事后完成的,而不是在导出期间完成的。
    猜你喜欢
    • 1970-01-01
    • 2020-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-14
    • 1970-01-01
    • 2021-11-14
    相关资源
    最近更新 更多