企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# 将 TensorFlow 投入生产 如果我们想在生产环境中使用我们的机器学习脚本,我们首先需要考虑一些要点作为最佳实践。在本节中,我们将概述其中的一些内容。 ## 做好准备 在本文中,我们想总结并浓缩将 TensorFlow 投入生产的各种技巧。我们将介绍如何最好地保存和加载词汇表,图,变量和模型检查点。我们还将讨论如何使用 TensorFlow 的命令行参数解析器并更改 TensorFlow 的日志记录详细程度。 ## 操作步骤 1. 运行 TensorFlow 程序时,我们可能需要检查内存中是否已存在其他图会话,或者在调试程序后是否清除了图会话。我们可以使用以下命令行来完成此任务: ```py from tensorflow.python.framework import ops ops.reset_default_graph() ``` 1. 在处理文本(或任何数据管道)时,我们需要确保我们保存处理数据的方式,以便我们可以以相同的方式处理未来的评估数据。例如,如果我们处理文本,我们需要确保我们可以保存并加载词汇表。以下代码是如何使用`JSON`库保存词汇表字典的示例: ```py import json word_list = ['to', 'be', 'or', 'not', 'to', 'be'] vocab_list = list(set(word_list)) vocab2ix_dict = dict(zip(vocab_list, range(len(vocab_list)))) ix2vocab_dict = {val:key for key,val in vocab2ix_dict.items()} # Save vocabulary import json with open('vocab2ix_dict.json', 'w') as file_conn: json.dump(vocab2ix_dict, file_conn) # Load vocabulary with open('vocab2ix_dict.json', 'r') as file_conn: vocab2ix_dict = json.load(file_conn) ``` > 在这里,我们以`JSON`格式保存了词汇词典,但我们也可以将其保存在`text`文件,`csv`甚至二进制格式中。如果词汇量很大,则首选二进制文件。您还可以考虑使用 pickle 库来创建`pkl`二进制文件,但请注意,pickle 文件在库和 Python 版本之间不能很好地转换。 1. 为了保存模型图和变量,我们创建了一个`Saver()`操作并将其添加到图中。建议我们在训练期间定期保存模型。要保存模型,请输入以下代码: ```py After model declaration, add a saving operations saver = tf.train.Saver() # Then during training, save every so often, referencing the training generation for i in range(generations): ... if i%save_every == 0: saver.save(sess, 'my_model', global_step=step) # Can also save only specific variables: saver = tf.train.Saver({"my_var": my_variable}) ``` > 请注意,`Saver()`操作也会采用其他参数。如前面的示例所示,它可以使用变量和张量字典来保存特定元素。每隔`n`小时也可以检查一次,定期执行保存操作。默认情况下,保存操作仅保留最后五个模型保存(出于空间考虑)。可以使用`maximum_to_keep`选项更改此设置。 1. 在保存模型之前,请务必命名模型的重要操作。如果 TensorFlow 没有名称,则没有简单的方法来加载特定的占位符,操作或变量。 TensorFlow 中的大多数操作和函数都接受`name`参数,如下例所示: ```py conv_weights = tf.Variable(tf.random_normal(), name='conv_weights') loss = tf.reduce_mean(... , name='loss') ``` 1. TensorFlow 还可以使用`tf.apps.flags`库在命令行上轻松执行 arg-parsing。使用这些函数,我们可以定义字符串,浮点数,整数或布尔值的命令行参数,如下面的代码片段所示。使用这些标志定义,我们可以运行`tf.app.run()`,它将使用以下标志参数运行`main()`函数: ```py tf.flags.DEFINE_string("worker_locations", "", "List of worker addresses.") tf.flags.DEFINE_float('learning_rate', 0.01, 'Initial learning rate.') tf.flags.DEFINE_integer('generations', 1000, 'Number of training generations.') tf.flags.DEFINE_boolean('run_unit_tests', False, 'If true, run tests.') FLAGS = tf.flags.FLAGS # Need to define a 'main' function for the app to run def main(_): worker_ips = FLAGS.worker_locations.split(",") learning_rate = FLAGS.learning_rate generations = FLAGS.generations run_unit_tests = FLAGS.run_unit_tests # Run the Tensorflow app if __name__ == "__main__": # The following is looking for a "main()" function to run and will pass. tf.app.run() # Can modify this to be more custom: tf.app.run(main=my_main_function(), argv=my_arguments) ``` 1. TensorFlow 具有内置日志记录,我们可以为其设置级别参数。我们可以设定的水平是`DEBUG`,`INFO`,`WARN`,`ERROR`和`FATAL`。默认为`WARN`,如下所示: ```py tf.logging.set_verbosity(tf.logging.WARN) # WARN is the default value, but to see more information, you can set it to # INFO or DEBUG tf.logging.set_verbosity(tf.logging.DEBUG) ``` ## 工作原理 在本节中,我们提供了在 TensorFlow 中创建生产级代码的提示。我们想介绍 app-flags,模型保存和日志记录等概念,以便用户可以使用这些工具一致地编写代码,并了解在其他代码中看到这些工具时的含义。还有许多其他方法可以编写好的生产代码,但下面的秘籍中将显示完整的示例。