TensorFlow常量、变量和占位符详解(学习笔记)

本文介绍了TensorFlow的基本概念,包括常量、变量和占位符的定义与使用方法。详细讲解了如何创建不同类型的张量,以及如何利用这些张量进行简单的数学运算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文章只是学习笔记,不具有任何参考性

http://c.biancheng.net/view/1885.html 学习网站

基本的TensorFlow提供了一个库定义和执行对张量的各种数学运算。

 

张量:可以理解为一个n维矩阵,所有类型的数据。包括标量,矢量和矩阵都是特殊类型的张量。

 

TensorFlow 支持一下三种类型的张量:

1.常量:常量是其值不能改变的张量

2.变量:当一个量在会话中的值需要更新时,使用变量来表示。例如,在神经网络中,权重需要在训练期间更新,可以通过将权重声明为变量来实现

变量在使用前需要被显示初始化。另外需要注意的是,常量存储在计算图的定义中,每次加载图时都会加载相关变量。换句话说,它们是占用内存的。另一方面,变量又是分开存储的。它们可以存储在参数服务器上。

3.占位符:用于将值输入TensorFlow图中。他们可以和feed_dict 一起使用来输入数据。在训练神经网络时,它们通常用于提供新的训练样本。在绘画中运行计算图时,可以为占位符赋值。这样在构建一个计算图时不需要真正地输入数据。需要注意的是占位符不包含任何数据,因此不需要初始化它们。

 

TensorFlow 常量

声明一个标量常量:

t_1 = tf.constant(4)

一个形如[1,3]的常量向量可以用如下代码声明:

t_2 = tf.constant([4,3,2])

要创建一个所有元素为零的张量,可以使用tf.zero()函数。这个语句可以创建一个形如[M,N]的零元素矩阵,数据类型(dtype)可以是32位,float32等

例如:

zero_t = tf.zeros([2,3],tf.int32)

还可以创建与现有Numpy数组或张量具有相同形状的张量常量

tf.zeros_like(t_2)

tf.ones_like(t_2)

创建一个所有元素都设为1的张量。下面的语句即创建一个形如[M,N]、元素均为1的矩阵:

例如:

tf.ones([2,3],tf.int32)

更进一步,还有以下语句:

  • 在一定范围内生成一个聪初值到终值等差排布的序列:
tf.linspace(start,stop,num)

相应的值位(stop-start/(num-1))例如:

range_t = tf.linspace(2.0,5.0,0.5)
  • 从开始(默认值=0)生成一个数字序列,增量为delta (默认值=1),直到终值(但不包括终值)
tf.range(start,limit,delta)
range_t = tf.range(5)
#resualt:[0,1,2,3,4]

TensorFlow 允许创建具有不同分布的随机张量:

1.使用以下语句创建一个具有一定均值(默认值=0.0)和标准差(默认值=1.0)、形状为[M,N] 的正态分布随及数组:

shape:输入张量的形状,必选

mean:正态分布的均值,默认为0

stddev:正态分布的标准差

dtype:输出的类型,默认为tf.float32

seed:随机数种子,是一个整数,当设置之后,每次生成的随机数都一样

name: 操作的名称

tf.random_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None)
t_random = tf.random_normal([2,3],mean=2.0,stddev=4,seed=12)

#2.创建一个具有一定均值(默认值=0.0)和标准差(默认值=1.0)、形状[M,N]的截尾正态分布随机数组:

t_random =tf.truncated_normal([1,5],stddev=2,seed=12)

#3.要在种子的[minval (default=0),maxval] 范围内创建形状为[M,N] 的给定伽马分布随机数组,请执行如下语句:

4.要将给定的张量随机剪为指定的大小,使用以下语句:

tf.random_crop(t_random[2,5],seed=12)

这里t_random 是一个已经定义好的张量。这将导致随及从张量 t_random 中裁剪出一个大小为[2,5]的张量。

很多时候需要以随机的顺序来呈现训练样本,可以使用tf.random.shuffle() 来沿着它的第一维随机排列张量。如果t_random 是想要重新排列的张量,使用下面的代码:

tf.set_random_seed(54)

TensorFlow 变量

它们通过使用变量类来创建。变量的定义还包括应该初始化的常量/随机值。下面的代码中创建了两个不同的张量变量t_a和t_b。 两者将被初始化为形状为[50,50]的随机均匀分布,最小值=0,最大值=10:

rand_t = tf.random_uniform([50,50],0,10,seed=0)
t_a = tf.Variable(rand_t)
t_b = tf.Variable(rand_t)

注意变量通常在神经网络中表示权重和偏置

定义两个变量的权重和偏置。

weights = tf.Variable(tf.random_noraml([100,100],stddev=2))
bias = tf.Variable(tf.zeros[100],name = 'biases')

在前面的例子中,都是利用一些常量来初始化变量,也可以指定一个变量来初始化另一个变量。下面的语句将利用前面定义的权重来初始化weight2:

weight2 = tf.Variable(weights.initialized_value(),name='w2')

变量的定义将指定变量如何被初始化,但是必须显式初始化所有的声明变量。在计算图的定义中通过声明初始化操作对象来实现:

intial_op = tf.global_variables_initializer()

每个变量也可以在运行途中单独来初始化

bias = tf.Variable(tf.zeros([100,100]))
with tf.Session() as sess:
    sess.run(bias.initializer)

保存变量:使用Saver类保存变量,定义一个Saver操作对象

saver = tf.train.Saver()

TensorFlow 占位符

它们用于将数据提供给计算图。

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

dtype 定占位符的数据类型,并且必须声明占位符时指定。在这里,为x定义一个占位符并计算 y=x *2,

x = tf.placeholder("float")

y = x * 2

data_x = tf.random_uniform([4,5],10)

with tf.Session() as sess:
    x_data = sess.run(data_x)
    print(sess.run(y,feed_dict{x:x_data}))

需要注意的是,所有常量、变量和占位符将在代码的计算图部分中定义。如果在定义部分使用 print 语句,只会得到有关张量类型的信息,而不是它的值。

为了得到相关的值,需要创建会话图并对需要提取的张量显式使用运行命令,如下所示:

print(sess.run(t_1))
#Will print the value of t_1 defined in step 1

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值