tf.placeholder详解

本文深入解析TensorFlow中placeholder的作用及使用方法,阐述其在构建计算流图中的重要性,并通过实例展示如何在神经网络模型中使用placeholder进行数据输入。
部署运行你感兴趣的模型镜像

感谢大佬的博文,转发点赞保存
https://blog.youkuaiyun.com/kdongyi/article/details/82343712

函数形式:

 tf.placeholder(
    dtype,
    shape=None,
    name=None
  )

参数:
dtype:数据类型。常用的是tf.float32,tf.float64等数值类型
shape:数据形状。默认是None,就是一维值,也可以是多维(比如[2,3], [None, 3]表示列是3,行不定)
name:名称
为什么要用placeholder?
Tensorflow的设计理念称之为计算流图,在编写程序时,首先构筑整个系统的graph,代码并不会直接生效,这一点和python的其他数值计算库(如Numpy等)不同,graph为静态的,类似于docker中的镜像。然后,在实际的运行时,启动一个session,程序才会真正的运行。这样做的好处就是:避免反复地切换底层程序实际运行的上下文,tensorflow帮你优化整个系统的代码。我们知道,很多python程序的底层为C语言或者其他语言,执行一行脚本,就要切换一次,是有成本的,tensorflow通过计算流图的方式,帮你优化整个session需要执行的代码,还是很有优势的。

所以placeholder()函数是在神经网络构建graph的时候在模型中的占位,此时并没有把要输入的数据传入模型,它只会分配必要的内存。等建立session,在会话中,运行模型的时候通过feed_dict()函数向占位符喂入数据。

代码示例:

import tensorflow as tf
import numpy as np
 
input1 = tf.placeholder(tf.float32)
input2 = tf.placeholder(tf.float32)
 
output = tf.multiply(input1, input2)
 
with tf.Session() as sess:
    print sess.run(output, feed_dict = {input1:[3.], input2: [4.]})
 
import tensorflow as tf
import numpy as np
 
x = tf.placeholder(tf.float32, shape=(1024, 1024))
y = tf.matmul(x, x)
 
with tf.Session() as sess:
    #print(sess.run(y))  # ERROR:此处x还没有赋值
    rand_array = np.random.rand(1024, 1024)
    print(sess.run(y, feed_dict={x: rand_array})) 

转载原文链接:https://blog.youkuaiyun.com/kdongyi/article/details/82343712

您可能感兴趣的与本文相关的镜像

TensorFlow-v2.15

TensorFlow-v2.15

TensorFlow

TensorFlow 是由Google Brain 团队开发的开源机器学习框架,广泛应用于深度学习研究和生产环境。 它提供了一个灵活的平台,用于构建和训练各种机器学习模型

### tf.estimator.LatestExporter 使用指南 `tf.estimator.LatestExporter` 是 TensorFlow 中的一个类,用于在模型训练和评估过程中导出最新的模型版本。它通常与 `tf.estimator.train_and_evaluate` 一起使用,以确保在训练完成后可以保存最新的模型供后续使用或部署。 以下是关于 `tf.estimator.LatestExporter` 的详细说明以及示例代码: #### 1. 基本功能 `tf.estimator.LatestExporter` 的主要功能是定期将最新的模型导出到指定目录。它会根据配置保留一定数量的最新导出模型,并删除旧的导出版本以节省存储空间。此功能对于需要频繁更新模型的场景非常有用[^1]。 #### 2. 参数详解 `tf.estimator.LatestExporter` 的构造函数包含以下参数: - **name**: 导出器的名称,通常用于标识不同的导出器。 - **serving_input_receiver_fn**: 定义输入签名的函数,用于指定模型如何接收输入数据。 - **assets_extra**: 额外的资产文件(可选),这些文件会被复制到导出目录中。 - **as_text**: 指定是否以文本格式保存模型(默认为 False)。 - **exports_to_keep**: 指定要保留的导出模型数量。如果设置为 None,则不会自动清理旧的导出模型[^1]。 #### 3. 示例代码 以下是一个完整的示例,展示如何使用 `tf.estimator.LatestExporter`: ```python import tensorflow as tf # 定义模型的输入签名函数 def serving_input_fn(): feature_spec = { 'feature_1': tf.io.FixedLenFeature([], dtype=tf.float32), 'feature_2': tf.io.FixedLenFeature([], dtype=tf.int64) } return tf.estimator.export.ServingInputReceiver( features=tf.compat.v1.parse_example(serialized=tf.placeholder(tf.string), features=feature_spec), receiver_tensors={'example_proto': tf.placeholder(tf.string, shape=[None])} ) # 创建 LatestExporter 实例 exporter = tf.estimator.LatestExporter( name='exporter', serving_input_receiver_fn=serving_input_fn, exports_to_keep=3 # 保留最近的 3 个导出模型 ) # 定义 TrainSpec 和 EvalSpec train_spec = tf.estimator.TrainSpec( input_fn=lambda: read_dataset('train', tf.estimator.ModeKeys.TRAIN, BATCH_SIZE), max_steps=TRAIN_STEPS ) eval_spec = tf.estimator.EvalSpec( input_fn=lambda: read_dataset('eval', tf.estimator.ModeKeys.EVAL, 2**15), steps=None, start_delay_secs=60, throttle_secs=EVAL_INTERVAL, exporters=exporter ) # 训练并评估模型 tf.estimator.train_and_evaluate(estimator, train_spec, eval_spec) ``` #### 4. 注意事项 - `serving_input_fn` 是定义模型输入签名的关键部分。它决定了模型在导出后如何接收输入数据。因此,必须根据实际需求正确实现该函数。 - 如果 `exports_to_keep` 设置为较小的值(例如 1 或 2),可能会导致频繁清理旧的导出模型,从而增加磁盘 I/O 开销。 - 在分布式训练环境中,`LatestExporter` 仍然可以正常工作,但需要确保所有节点共享相同的导出目录[^1]。 #### 5. 与其他工具的集成 虽然 `tf.estimator` 提供了强大的模型导出功能,但在某些情况下可能更倾向于使用 Keras API。Keras 提供了更灵活的模型定义方式,并且可以通过 `model.save` 方法直接保存模型。此外,Keras 还支持动态图机制和即时执行模式,这使得模型开发更加直观[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值