前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Tensorflow中的placeholder和Variable | MI-机器智能 | Tensorflow技能树

Tensorflow中的placeholder和Variable | MI-机器智能 | Tensorflow技能树

作者头像
用户7623498
发布2020-08-04 15:16:49
3880
发布2020-08-04 15:16:49
举报

二者的主要区别

  • tf.Variable:主要在于一些可训练变量(trainable variables),比如模型的权重(weights,W)或者偏执值(bias);
  • 声明时,必须提供初始值;
  • 名称的真实含义,在于变量,也即在真实训练时,其值是会改变的,自然事先需要指定初始值;

weights = tf.Variable( tf.truncated_normal([IMAGE_PIXELS, hidden1_units], stddev=1./math.sqrt(float(IMAGE_PIXELS)), name='weights') ) biases = tf.Variable(tf.zeros([hidden1_units]), name='biases')

  • tf.placeholder:用于得到传递进来的真实的训练样本:
  • 不必指定初始值,可在运行时,通过 Session.run 的函数的 feed_dict 参数指定;
  • 这也是其命名的原因所在,仅仅作为一种占位符;

images_placeholder = tf.placeholder(tf.float32, shape=[batch_size, IMAGE_PIXELS]) labels_placeholder = tf.placeholder(tf.int32, shape=[batch_size])

二者真实的使用场景

for step in range(FLAGS.max_steps): feed_dict = { images_placeholder = images_feed, labels_placeholder = labels_feed } _, loss_value = sess.run([train_op, loss], feed_dict=feed_dict)

当执行这些操作时,tf.Variable 的值将会改变,也即被修改,这也是其名称的来源(variable,变量)。

函数说明

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

参数:

  • dtype:数据类型。常用的是tf.float32,tf.float64等数值类型
  • shape:数据形状。默认是None,就是一维值,也可以是多维,比如[2,3], [None, 3]表示列是3,行不定
  • name:名称。

[html] view plain copy

  1. x = tf.placeholder(tf.float32, shape=(1024, 1024))
  2. y = tf.matmul(x, x)
  3. with tf.Session() as sess:
  4. print(sess.run(y)) # ERROR: 此处x还没有赋值.
  5. rand_array = np.random.rand(1024, 1024)
  6. print(sess.run(y, feed_dict={x: rand_array})) # Will succeed.

返回:Tensor 类型

placeholder(type,strucuct…)是tensorflow中又一保存数据的利器,它的第一个参数是你要保存的数据的数据类型,大多数是tensorflow中的float32数据类型,后面的参数就是要保存数据的结构,比如要保存一个1×2的矩阵,则struct=[1 2]。它在使用的时候和前面的variable不同的是在session运行阶段,需要给placeholder提供数据,利用feed_dict的字典结构给placeholdr变量“喂数据”。

举个栗子

# -*- coding: utf-8 -*-

"""

Created on

@author:

"""

import tensorflow as tf

a=tf.placeholder(tf.float32)

b=tf.placeholder(tf.float32)

c=tf.add(a,b)

with tf.Session() as sess:

print(sess.run(c,feed_dict={a:10,b:30})) #把10赋给a,30赋给b

运行结果:

40.0

输入一个数据类型为float32,数据格式为[……],名称为x-input的参数

参考资料

What’s the difference between tf.placeholder and tf.Variable

https://blog.csdn.net/zj360202/article/details/70243127

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-04-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 决策智能与机器学习 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档