tf.get_variable()的使用方法

参数数量及其作用
该函数共有十一个参数,常用的有:名称name、变量规格shape、变量类型dtype、变量初始化方式initializer、所属于的集合collections。

 def get_variable(name,
                  shape=None,
                  dtype=None,
                  initializer=None,
                  regularizer=None,
                  trainable=True,
                  collections=None,
                  caching_device=None,
                  partitioner=None,
                  validate_shape=True,
                  use_resource=None,
                  custom_getter=None):

该函数的作用是创建新的tensorflow变量,常见的initializer有:常量初始化器tf.constant_initializer、正太分布初始化器tf.random_normal_initializer、截断正态分布初始化器tf.truncated_normal_initializer、均匀分布初始化器tf.random_uniform_initializer。

例子
该例子将分别讲述常见的几种initializer的使用方法

# 初始化
def testInitializer():
    """
    如果你定义的变量名称在之前已被定义过,则TensorFlow 会引发异常。
    可使用tf.get_variable( ) 函数代替tf.Variable( )。
    如果变量存在,函数tf.get_variable( ) 会返回现有的变量。
    如果变量不存在,会根据给定形状和初始值创建变量。

    该函数的作用是创建新的tensorflow变量,
    常见的initializer有:
        1.常量初始化器:tf.constant_initializer
        2.正太分布初始化器:tf.random_normal_initializer
        3.截断正态分布初始化器:tf.truncated_normal_initializer
        4.均匀分布初始化器:tf.random_uniform_initializer
        5.tf.contrib.layers.xavier_initializer:
            该函数返回一个用于初始化权重的初始化程序 “Xavier” 。
            这个初始化器是用来保持每一层的梯度大小都差不多相同。
            参数:
                uniform: 使用uniform或者normal分布来随机初始化。默认uniform
                seed: 可以认为是用来生成随机数的seed
                dtype: 只支持浮点数。
            返回值:
                初始化权重矩阵

    """
    # 常量初始化器
    v1_cons = tf.get_variable('v1_cons', shape=[1, 4], initializer=tf.constant_initializer()) # 用0初始化
    v2_cons = tf.get_variable('v2_cons', shape=[1, 4], initializer=tf.constant_initializer(9)) # 用9初始化
    v3_cons = tf.get_variable('v3_cons', shape=[1, 4], initializer=tf.zeros_initializer()) # 用0初始化
    v4_cons = tf.get_variable('v4_cons', shape=[1, 4], initializer=tf.ones_initializer()) # 用1初始化

    # 正太分布初始化器
    v1_nor = tf.get_variable('v1_nor', shape=[1, 4], initializer=tf.random_normal_initializer())
    v2_nor = tf.get_variable('v2_nor', shape=[1, 4], initializer=tf.random_normal_initializer(mean=0, stddev=5, seed=0))  # 均值、方差、种子值

    # 截断正态分布初始化器
    v1_trun = tf.get_variable('v1_trun', shape=[1, 4], initializer=tf.truncated_normal_initializer())
    v2_trun = tf.get_variable('v2_trun', shape=[1, 4], initializer=tf.truncated_normal_initializer(mean=0, stddev=5, seed=0))  # 均值、方差、种子值

    # 均匀分布初始化器
    v1_uni = tf.get_variable('v1_uni', shape=[1, 4], initializer=tf.random_uniform_initializer())
    v2_uni = tf.get_variable('v2_uni', shape=[1, 4], initializer=tf.random_uniform_initializer(maxval=-1., minval=1., seed=0))  # 最大值、最小值、种子值

    with tf.compat.v1.Session() as session:
        session.run(tf.global_variables_initializer())
        print("常量初始化器v1_cons:", session.run(v1_cons))
        print("常量初始化器v2_cons:", session.run(v2_cons))
        print("正太分布初始化器v1_nor:", session.run(v1_nor))
        print("正太分布初始化器v2_nor:", session.run(v2_nor))
        print("截断正态分布初始化器v1_trun:", session.run(v1_trun))
        print("截断正态分布初始化器v2_trun:", session.run(v2_trun))
        print("均匀分布初始化器v1_uni:", session.run(v1_uni))
        print("均匀分布初始化器v2_uni:", session.run(v2_uni))

运行结果:

常量初始化器v1_cons: [[0. 0. 0. 0.]]
常量初始化器v2_cons: [[9. 9. 9. 9.]]
常量初始化器v3_cons: [[0. 0. 0. 0.]]
常量初始化器v4_cons: [[1. 1. 1. 1.]]
正太分布初始化器v1_nor: [[-0.72394335 -0.96410173  0.06103099  0.39317042]]
正太分布初始化器v2_nor: [[-1.9957881 10.522196   0.8553612  2.7325907]]
截断正态分布初始化器v1_trun: [[-0.3574269 -1.5260212 -1.156451   0.6296464]]
截断正态分布初始化器v2_trun: [[-1.9957881  0.8553612  2.7325907  2.1127698]]
均匀分布初始化器v1_uni: [[0.91868734 0.73822    0.02020836 0.3000238 ]]
均匀分布初始化器v2_uni: [[ 0.79827476 -0.9403336  -0.69752836  0.9034374 ]]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值