zoukankan      html  css  js  c++  java
  • Tensorflow常用函数说明

    1.矩阵操作

    1.1矩阵生成

    这部分主要将如何生成矩阵,包括全0矩阵,全1矩阵,随机数矩阵,常数矩阵等

    sess=tf.InteractiveSession()
    #x=tf.ones([2,3],tf.int32)
    x=tf.zeros([2,3],tf.int32)
    print (sess.run(x))

    新建一个与给定的tensor类型大小一致的tensor,使其所有元素为0和1

    sess=tf.InteractiveSession()
    tensor=[[1,2,3],[4,5,6]]
    #x=tf.ones_like(tensor)
    x=tf.zeros_like(tensor)
    print (sess.run(x))

    创建一个形状大小为shape的tensor,初始值为value

    sess=tf.InteractiveSession()
    x=tf.fill([2,3],2)
    print (sess.run(x))

    创建一个常量tensor,按照给出value来赋值,可以用shape来指定其形状。value可以是一个数,也可以是一个list。 
    如果是一个数,那么这个常量中所有值的按该数来赋值。 
    如果是list,那么len(value)一定要小于等于shape展开后的长度。赋值时,先将value中的值逐个存入。不够的部分,则全部存入value的最后一个值。

    sess=tf.InteractiveSession()
    #x=tf.constant(2,shape=[2,3])
    x=tf.constant([2,3],shape=[2,3])
    print (sess.run(x))

    random_normal:正态分布随机数,均值是mean,标准差是stddev

    truncated_normal:截断正态分布随机数,均值是mean,标准差是stddev,只保留[mean-2*stddev,mean+2*stddev]范围内的随机数

    random_uniform:均匀分布随机数,范围为[minval,maxval]

    sess=tf.InteractiveSession()
    x=tf.random_normal(shape=[1,5],mean=0.0,stddev=1.0,dtype=tf.float32)
    print (sess.run(x))
    tf.get_variable(name, shape=None, dtype=dtypes.float32, initializer=None,
                     regularizer=None, trainable=True, collections=None,
                     caching_device=None, partitioner=None, validate_shape=True,
                     custom_getter=None):

    如果在该命名域中之前已经有名字=name的变量,则调用那个变量;如果没有,则根据输入的参数重新创建一个名字为name的变量。

    initializer为初始化工具,有tf.zero_initializer,tf.ones_initializer,tf.constant_initializer,tf.random_uniform_initializer,tf.random_normal_initializer,tf.truncated_normal_initializer

    1.2 矩阵变换

    tf.shape(Tensor)

    返回张量的形状。但是注意,tf.shape函数本身也是返回一个张量。而在tf中,张量是需要用sess.run(Tensor)来得到具体的值的。

    sess=tf.InteractiveSession()
    x=[[1,2,3],[4,5,6]]
    shape=tf.shape(x)
    print (shape)
    print (sess.run(shape))
    
    Tensor("Shape:0", shape=(2,), dtype=int32)
    [2 3]

    tf.expand_dims(Tensor,dim)

    为张量增加一个维度

    sess=tf.InteractiveSession()
    x=[1,2,3]
    y=tf.expand_dims(x,1)
    print (sess.run(y))
    
    [[1]
     [2]
     [3]]
    
    #y=tf.expand_dims(x,0)
    [[1,2,3]]

    tf.pack()

    将一个R维张量列表沿着axis轴组合成一个R+1维的张量。

    x=[1,4]
    y=[2,5]
    z=[3,6]
    t=tf.stack([x,y,z],1)
    print (sess.run(t))
    
    [[1 2 3]
     [4 5 6]]

    tf.concat(concat_dim,values)将张量沿着指定的维数拼接起来。

    tf.sparse_to_dense()将稀疏矩阵转化为密集矩阵

    def sparse_to_dense(sparse_indices,
                        output_shape,
                        sparse_values,
                        default_value=0,
                        validate_indices=True,
                        name=None):

    sparse_indices: 元素的坐标[[0,0],[1,2]] 表示(0,0),和(1,2)处有值 
    output_shape: 得到的密集矩阵的shape 
    sparse_values: sparse_indices坐标表示的点的值,可以是0D或者1D张量。若0D,则所有稀疏值都一样。若是1D,则len(sparse_values)应该等于len(sparse_indices) 
    default_values: 缺省点的默认值

    tf.random_shuffle(value)

    沿着value的第一维进行随机重新排列。

    tf.argmax|tf.argmin(input=tensor,dimension=axis)

    找到给定的张量tensor在指定轴axis上的最大值/最小值的位置。

    tf.equal(x,y)

    判断两个tensor是否每个元素都相等。

    tf.cast(x,dtype)

    将x的数据格式转化为dtype。

    tf.matmul(a,b,transpose_a=False,transpose_b=False,a_is_parse=False,b_is_sparse=False)

    如果对应的transpose项为True,例如transpose_a=True,那么a在参与运算之前就会先转置一下。 
    而如果a_is_sparse=True,那么a会被当做稀疏矩阵来参与运算。

    tf.reshape(tensor,shape)

    如果shape=[-1],表示将tensor展开成一个list。

    2. 神经网络相关操作

    tf.nn.embedding_lookup(params,ids)

    简单来说,就是讲一个数字序列ids转化成embedding序列表示。

    tf.trainable_variables()

    返回所有可以训练的变量。

    tf.gradients(ys,xs)

    ys和xs都可以是一个tensor或者tensor列表。而计算完成以后,该函数会返回一个长为len(xs)的tensor列表,列表中的每个tensor是ys中每个值对xs[i]求导之和。

    tf.clip_by_global_norm(t_list,clip_norm)

    修正梯度值,用于控制梯度爆炸的问题。梯度爆炸和梯度弥散的原因一样,都是因为链式法则求导的关系,导致梯度的指数级衰减。为了避免梯度爆炸,需要对梯度进行修剪。

    t_list为待修剪的张量,clip_norm表示修剪比例,函数返回两个参数:list_clipped,修剪后的张量,以及global_norm,一个中间计算量。

    list_clipped[i]=t_list[i] * clip_norm / max(global_norm, clip_norm),其中 
    global_norm = sqrt(sum([l2norm(t)**2 for t in t_list]))

    tf.nn.dropout(x,keep_prob)

    按照概率将x中的一些元素置0,并将其他的值放大。x是一个张量,而keep_prob是一个(0,1]之间的值。x中的各个元素清零的概率互相独立,为1-keep_prob,而没有清零的元素,则会统一乘以1/keep_prob, 目的是为了保持x的整体期望值不变。

    3.普通操作

    tf.linspace|tf.range

    tf.linspace(start,stop,num)

    在[start,stop]的范围内产生num个数的等差数列,start和stop要用浮点数进行表示。

    tf.range(start,limit=None,delta=1) 在[start,limit)范围内以步进值delta产生等差数列。

    tf.assign(ref,value)

    用来更新模型中变量的值,ref是待赋值的变量,value是更新的值。

    4.规范化

    tf.variable_scope

    为变量添加命名域

    with tf.variable_scope("foo"):

    tf.get_variable_scope()返回当前变量的命名域。

  • 相关阅读:
    查找表包含的页和页所在的表
    一次死锁追踪经历
    SQL语句实现取消自增列属性
    如何修改SQL Server 2005服务器名称
    出身在二三线城市软件工作者的悲哀
    (转)Android 混淆器 ProGuard (一定程度防止反编译)
    《Java 并发编程实战》第一、二章阅读笔记
    在 Visual Studio 2010 中配置 OpenGL 开发环境
    《Java 学习笔记》 第七、八章阅读体验
    2012年上半年阅读书籍清单
  • 原文地址:https://www.cnblogs.com/qniguoym/p/7778336.html
Copyright © 2011-2022 走看看