tensorflow常用函数

1. tf.placeholder、tf.Variable、tf.get_variable

 

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

    仅仅作为一种占位符, 用于得到传递进来的真实的训练样本,赋值一般用sess.run(feed_dict = {x:xs, y_:ys}),其中x,y_是用placeholder创建出来的.

tf.Variable(initial_value=None, trainable=True, name=None, dtype=None, expected_shape=None)

    主要在于一些可训练变量(trainable variables),比如模型的权重(weights,W)或者偏执值(bias);声明时,必须提供初始值;在真实训练时,其值是会改变的; 

tf.get_variable(name, shape=None, dtype=None, initializer=None, trainable=True)

    获取已经存在的变量,如果不存在,就新建一个。使用tf.Variable时,如果检测到命名冲突,系统会自己处理。使用tf.get_variable()时,系统不会处理冲突,而会报错。

    当我们需要共享变量的时候,需要使用tf.get_variable()。必须和reusetf.variable_scope()配合使用

import tensorflow as tf

with tf.variable_scope("scope1"):
    w1 = tf.get_variable("w1", shape=[])
    w2 = tf.Variable(0.0, name="w2")
with tf.variable_scope("scope1", reuse=True):
    w1_p = tf.get_variable("w1", shape=[])
    w2_p = tf.Variable(1.0, name="w2")

print(w1 is w1_p, w2 is w2_p)
#输出
#True  False

2.tf.name_scope()与tf.variable_scope()

tf.name_scope(name)

    此函数作用是共享变量。在一个作用域scope内共享一些变量,简单来说,就是给变量名前面加个变量空间名,但只限于tf.Variable()的变量,tf.get_variable不受其约束

tf.variable_scope(name_or_scope,reuse=None)

共享变量与命名空间管理,当reuse为False或者None时(这也是默认值),同一个tf.variable_scope下面的变量名不能相同;当reuse为True时,tf.variable_scope只能获取已经创建过的变量。简而言之,reuse=False时,tf.variable_scope创建变量;reuse=True时,tf.variable_scope获取变量

 

3.随机数生成函数

函数名称随机数分布主要参数样例
tf.random_normal正态分布shape、mean(0)、stddev(1.0)、dtype(float32)、seed(None)、name(None)tf.random_normal(shape = [2, 3], name=‘a’)
tf.truncated_normal截断的正态分布,如果随机出来的值偏离平均值超过2个标准差,那么这个数将被重新随机shape、mean(0)、stddev(1.0)、dtype(float32)、seed(None)、name(None)tf.truncated_normal(shape = [2, 3], name=‘a’)
tf.random_uniform均匀分布shape、minval(0)、maxval(None)、dtype(float32)、seed(None)、name(None)tf.random_uniform(shape = [2, 3], name=‘a’)
tf.random_gammaGamma分布shape、alpha、beta(None)、dtype(float32)、seed(None)、name(None)

tf.random_gamma([10], [0.5, 1.5])

# a 的形状为[10, 2], 其中每个 slice [:, 0] 和 [:, 1] 表示从每个分布中抽取的样本

 

4.常数生成函数

函数名称功能主要参数样例
tf.zeros产生全0的数组shape、dtype(float32)、name(None)tf.zeros(shape = [2,3], dtype = 'int32')
tf.zeros_like产生于给定tensor类型大小一致的全0数组tensor、dtype(None)、name(None)tf.zeros_like(a)
tf.ones产生全1的数组shape、dtype(float32)、name(None)tf.ones(shape = [2,3], dtype = 'int32')
tf.ones_like产生于给定tensor类型大小一致的全1数组tensor、dtype(None)、name(None)tf.ones_like(a)
tf.fill产生一个全部为给定数字的数组shape、value、name(None)tf.fill(shape = [2,3],9)
tf.constant产生一个给定值的常量value、(shape(None)、dtype(float32)、name(‘Const’)

tf.constant([1,2,3])

tf.constant(0, shape = [2,2])

 

5.初始化方法

tf.constant_initializer(value, dtype)
tf.zeros_initializer(dtype)
tf.ones_initializer(dtype)
tf.random_normal_initializer(mean, stddev, seed, dtype)
tf.truncated_normal_initializer(mean, stddev, seed, dtype)
tf.random_uniform_initializer(minval, maxval, seed, dtype)
tf.uniform_unit_scaling_initializer(factor, seed, dtype)  #不需要指定最大最小值
tf.variance_scaling_initializer(mode=,distribution,seed,dtype) #生成截断正太分布和均匀分布
import tensorflow as tf 
init_uniform_unit = tf.uniform_unit_scaling_initializer(factor=1.0, seed=None, dtype=tf.float32) 
with tf.Session() as sess: 
    x = tf.get_variable('x', shape=[10], initializer=init_uniform_unit)
    x.initializer.run() 
    print(x.eval())

6.初始化模型参数

tf.global_variables_initializer()

初始化所有的变量。返回一个初始化所有全局变量的操作(Op)

tf.local_variables_initializer()

返回一个初始化所有局部变量的操作(Op)。

7.collection相关函数

tf.add_to_collection(name, value)

   此函数将元素添加到列表中。如果不存在,创建一个新的列表

tf.get_collection(name)

  此函数获取列表

tf.add_n(inputs)

   此函数将元素相加并返回

import tensorflow as tf;  
 
v1 = tf.get_variable(name='v1', shape=[1], initializer=tf.constant_initializer(0))
tf.add_to_collection('loss', v1)
v2 = tf.get_variable(name='v2', shape=[1], initializer=tf.constant_initializer(2))
tf.add_to_collection('loss', v2)
 
with tf.Session() as sess:
	sess.run(tf.initialize_all_variables())
	print sess.run(tf.add_n(tf.get_collection('loss')))

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值