tf.placeholder函数说明

本文介绍了TensorFlow中placeholder的作用及使用方法。placeholder用于构建计算图时预留位置,之后通过feed_dict填充数据。文章还提供了示例代码说明如何在神经网络中应用此功能。
部署运行你感兴趣的模型镜像

函数形式:

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

参数:

  1. dtype:数据类型。常用的是tf.float32,tf.float64等数值类型
  2. shape:数据形状。默认是None,就是一维值,也可以是多维(比如[2,3], [None, 3]表示列是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://www.jianshu.com/p/ec261a65e3c9


觉得有用请留下你的赞 ^_^ 

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

TensorFlow-v2.15

TensorFlow-v2.15

TensorFlow

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

`tf.placeholder` 是在早期 TensorFlow 版本中使用的占位符操作符,它在图执行前预留空间,以便在运行时传入数据。而从 TF 2.0 开始,`tf.placeholder` 被官方建议弃用,转而使用 `tf.Variable` 来创建常量变量,特别是当你需要在程序执行期间动态赋值的数据。 如果你想用 `tf.Variable` 替代 `tf.placeholder`,你需要做以下几点: 1. **创建常量变量**:使用 `tf.Variable(initial_value=None, trainable=True, name=None)` 函数创建一个变量,`initial_value` 设置初始值,`trainable` 表示是否参与训练,`name` 是变量名称。 ```python variable = tf.Variable(tf.zeros([batch_size, input_shape])) ``` 2. **初始化变量**:在每次会话开始之前,你需要通过 `.assign` 或 `.initializer` 初始化变量,如果是模型的权重,则通常会在构建 `tf.keras.Model` 的时候一起完成自动初始化。 ```python sess.run(variable.initializer) ``` 3. **传入数据**:如果需要动态输入数据,可以直接赋值给变量,而不是像 placeholder 那样留空。 ```python # 在某个时刻赋予数据 variable.assign(new_data) ``` 4. **注意区分训练模式和评估模式**:对于需要在整个计算图中保持不变的参数,可以设置其`trainable=False`。 总之,`tf.Variable` 更加通用,不仅可以用作占位符,还可以存储模型参数等。但在处理需要延迟赋值的情况时,可以选择 `tf.Variable` 的 `assign` 功能。
评论 22
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值