当前位置: 首页 > 知识库问答 >
问题:

将训练好的Tensorflow模型保存到另一台机器上进行推理[副本]

钱哲茂
2023-03-14

到目前为止,这是我认为我需要的行,但不确定它是否正确。

            tf.saved_model.simple_save(sess, 'mnist_model',                                                                                 
                inputs={'x': self.x},                                                                                                   
                outputs={'y_': self.y_, 'y_conv':self.y_conv})                                                                          

如果有人能告诉我如何正确地保存训练过的模型,以及使用哪些变量来使用保存的模型进行推理,我会非常感激的。

共有1个答案

锺高翰
2023-03-14

可以这样做的一种方法是在图形定义中创建tf.train.saver()对象,然后使用该对象将网络保存到指定的目录中。然后,该目录中的权重可以从远程计算机下载到本地计算机,并在本地还原。下面是一个小的示例网络:

import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data

mnist = input_data.read_data_sets('MNIST_data', one_hot=True)


# >>>> Config. Vars <<<<

TRAIN_STEPS = 1000

SAVE_EVERY  = 100


# >>>> Network <<<<

inputs = tf.placeholder(tf.float32, shape=[None, 784])

labels = tf.placeholder(tf.float32, shape=[None, 10])

h1     = tf.layers.dense(inputs, 256, activation=tf.nn.relu, use_bias=True)

logits = tf.layers.dense(h1, 10, use_bias=True)

predictions = tf.nn.softmax(logits)

prediction_ids = tf.argmax(predictions, axis=1)

# >>>> Loss & Optimisation <<<<

loss = tf.nn.softmax_cross_entropy_with_logits_v2(labels=labels, logits=logits)

opt  = tf.train.AdamOptimizer().minimize(loss)

# >>>> Utilities <<<<

init  = tf.global_variables_initializer()

saver = tf.train.Saver()


with tf.Session() as sess:

    sess.run(init)

    # >>>> Training - run on remote, comment out locally <<<<

    for i in range(TRAIN_STEPS):

        print("Train step {}".format(i), end="\r")

        batch_data, batch_labels = mnist.train.next_batch(batch_size=128)

        feed_dict = {
            inputs: batch_data,
            labels: batch_labels
        }

        l, _ = sess.run([loss, opt], feed_dict=feed_dict)

        if i % SAVE_EVERY == 0:

            saver.save(sess, "saved_model/network_weights.ckpt")


    # >>>> Using the network - run locally to use the network <<<

    saver.restore(sess, "saved_model/network_weights.ckpt")

    test_data, test_labels = mnist.test.images, mnist.test.labels

    feed_dict = {
        inputs: test_data,
        labels: test_labels
    }

    preds = sess.run(prediction_ids, feed_dict=feed_dict)

    print(preds)

因此,一旦您在网络中定义了保存程序,您就可以使用它将权重保存到指定的目录中--在本例中,保存到“saved_models”目录中,在运行此特定代码之前,您需要创建该目录。

恢复模型非常简单,只需调用saver.restore()并将会话和权重存储路径传递给它。因此您可以在远程机器上运行此代码,将“saved_models”目录下载到本地机器上,然后运行此代码并注释掉训练部分以实际使用模型。

 类似资料:
  • 本文向大家介绍Tensorflow实现在训练好的模型上进行测试,包括了Tensorflow实现在训练好的模型上进行测试的使用技巧和注意事项,需要的朋友参考一下 Tensorflow可以使用训练好的模型对新的数据进行测试,有两种方法:第一种方法是调用模型和训练在同一个py文件中,中情况比较简单;第二种是训练过程和调用模型过程分别在两个py文件中。本文将讲解第二种方法。 模型的保存 tensorflo

  • 我仍在学习Python和创建模型,对使用Spacy的NLP非常陌生。我曾经https://spacy.io/usage/training#ner培训Spacy现有的模式——en_core_web_sm。 我用我的领域特定实体训练了这个模型。 现在我假设我会在输出目录中找到一个模型文件。相反,我有4个子文件夹——词汇表、ner、标记器、解析器。还有2个文件meta.json和标记器。ner子文件夹有

  • 本文向大家介绍tensorflow如何继续训练之前保存的模型实例,包括了tensorflow如何继续训练之前保存的模型实例的使用技巧和注意事项,需要的朋友参考一下 一:需重定义神经网络继续训练的方法 1.训练代码 第一次训练截图: 2.恢复上一次的训练 使用上次保存下的数据进行继续训练和保存: #最后要提一下的是: checkpoint文件 meta保存了TensorFlow计算图的结构信息 da

  • 我正在尝试将一个使用sklearn训练的模型部署到endpoint,并将其作为预测的API。我想使用sagemaker的目的就是部署和服务器模型,我已经使用序列化了这个模型,仅此而已。我读过的每个博客和sagemaker python文档都表明,为了在sagemaker中部署,sklearn模型必须在sagemaker上进行培训。 在阅读SageMaker文档时,我了解到SageMaker允许用户

  • 问题内容: 我有一个训练了40个时代的模型。我为每个纪元保留了检查点,并且还用保存了模型。培训代码为: 但是,当我加载模型并尝试再次对其进行训练时,它会像以前从未进行过训练一样从头开始。损失不是从上一次训练开始的。 使我感到困惑的是,当我加载模型并重新定义模型结构并使用时,效果很好。因此,我相信模型权重已加载: 但是,当我继续进行此训练时,损失与初始阶段一样高: 我在这里和这里搜索并找到了一些保存

  • 如何保存已训练的模型? 以后如何还原此保存的模型?