TensorFlow常用函数介绍

对于TensorFlow中的基本用法,参考了网上很多博客,把自己认为解释的比较好的做一些整理。

tensorflow中tf.Variable()与tf.get_variable()两个函数的区别

一个变量通过调用run() 方法维持图的状态。你通过构造variable 类的实例来添加一个变量到图中。Variable() 构造器需要一个初始值,可以是任意类型和shape 的Tensor。初始值定义了变量的type和shape。构造完成之后,变量的type和shape 是固定的。可以使用assign 方法来修改变量的值。如果你想修改变量的shape,你必须使用assign 操作。并且validate_shpe=False。就像任何Tensor,通过Variable() 创建的variable,可以用作图中其他操作节点的输入。另外,所有操作承载的Tensor 类传递给variables

图一

首先解释一下个别参数的含义


initial_value:  一个Tensor,或者可以转化为Tensor的Python对象,其含义为:变量的初始值。初始值必须指定shape除非validate_shape 被设置为False;

trainable:  如果是True,变量也默认添加到GraphKeys.TRAINABLE_VARIABLES。这是很多优化器类使用的默认变量列表

collections:指定该图变量的类型、默认为[GraphKeys.GLOBAL_VARIABLES],为list类型

validate_shape:如果为False,则不进行类型和维度检查

name:变量的名称,如果没有指定则系统会自动分配一个唯一的值

具体区别:

1. tf.get_variable跟tf.Variable都可以用来定义图变量,但是前者的必需参数(即第一个参数)并不是图变量的初始值,而是图变量的名称。尽管上图显示每一个变量函数都有很多的参数,但是也只有第一个是必须填写的

2. 使用tf.Variable时,如果检测到命名冲突,系统会自己处理。使用tf.get_variable()时,系统不会处理冲突,而会报错


图二

        基于这两个函数的特性,当我们需要共享变量的时候,需要使用tf.get_variable()。在其他情况下,这两个的用法是一样的。他们之间的实质性区别就是:由于tf.Variable()每次都在创建新对象,所有reuse=True和它并没有什么关系。对于get_variable(),来说,如果已经创建的变量对象,就把那个对象返回,如果没有创建变量对象的话,就创建一个新的。

tf.variable_scope和tf.name_scope

        在图二中使用tf.get_variable()遇到相同名字的变量,就会报错。为什么提到这两个函数,这两个函数有什么作用?简单来说就是为变量添加命名域,一个深度学习模型的参数变量往往是成千上万的,不加上命名空间加以分组整理,将会成为可怕的灾难。TensorFlow的命名空间分为两种,tf.variable_scope和tf.name_scope。

        tf.variable_scope可以让变量有相同的命名,包括tf.get_variable得到的变量,还有tf.Variable的变量tf.name_scope可以让变量有相同的命名,只是限于tf.Variable的变量


图三


图四

换成下面的代码就可以执行了:


图五


神经网络组件:tf.nn

一.激活函数

常见的激活函数的模型可以参考这篇博客:常见激活函数总结

激活操作提供了在神经网络中使用的不同类型的非线性模型。包括光滑非线性模型(sigmoid, tanh, elu, softplus, and softsign)。连续但是不是处处可微的函数(relu, relu6, crelu and relu_x)。当然还有随机正则化 (dropout)所有的激活操作都是作用在每个元素上面的,输出一个tensor和输入的tensor又相同的形状和数据类型。这里列出tensorflow提供的这些激活函数,但是就不细讲原理了,参照链接就行.至于使用也是非常简单的.只以relu作为例子,其他的使用方式差不多.

tf.nn.relu(features, name=None)

参数:

features : tensor类型,必须是这些类型:A Tensor. float32, float64, int32, int64, uint8, int16, int8, uint16, half.

name: 操作名称(可选)

还有一些其他的激活函数为:


图六


二.分类

分类实现了一些交叉熵的函数等等,要是你的神经网络有分类的任务什么的化,一般可以用在输出层。Tensorflow的softmax_cross_entropy_with_logits函数TensorFlow四种Cross Entropy算法实现和应用

1.  tf.nn.softmax(logits, dim=-1, name=None)

参数:

logits:非空的tensor,类型必须为half, float32, float64.

dim:softmax作用的维度,默认是-1,表示最后一个维度

name:【可选】这个操作的名字

返回值:

返回一个tensor,和logits有相同的类型和形状

2. tf.nn.log_softmax(logits, dim=-1, name=None)

3. tf.nn.softmax_cross_entropy_with_logits(logits, labels, dim=-1, name=None)

作用:对于logitslabels之间计算softmax交叉熵。要是你对于softmax熟悉的话,这里很容易理解。通俗来说,就是在离散分类任务的时候度量概率误差的。softmax之后的每一个分量就代表一个类,分量(类)上面的值就是该类的概率。

这个函数并不是计算softmax的函数,只是根据softmax计算分类误差,所以不要吧这个函数当做softmax函数使用。logits和labels必须有相同的形状[batch_size, num_classes]相同的类型 (either float16, float32, or float64)

logits:Unscaled log probabilities.

labels:你的labels矩阵,每一行代表一个样本的概率分布(要是你熟悉softmax和onehot encoding的话)

dim:作用的维度,默认是-1,表示最后的那个维度

name:【可选】这个操作的名字

返回:一个1维的tensor,长度为batch_size,类型和logits一样。其中是各个元素相应样本的softmax的交叉熵损失。

4. tf.nn.weighted_cross_entropy_with_logits(logits, targets, pos_weight, name=None)

其他


tf.nn.dropout(x, keep_prob, noise_shape=None, seed=None, name=None)

按概率来将x中的一些元素值置零,并将其他的值放大。用于进行dropout操作,一定程度上可以防止过拟合

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


tf.fill(shape,value,name=None) :创建一个形状大小为shape的tensor,其初始值为value:


tf.constant(value,dtype=None,shape=None,name=’Const’)

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



tf.random_normal(shape,mean=0.0,stddev=1.0,dtype=tf.float32,seed=None,name=None)

tf.truncated_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None)

tf.random_uniform(shape,minval=0,maxval=None,dtype=tf.float32,seed=None,name=None)

这几个都是用于生成随机数tensor的。尺寸是shape

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

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

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


tf.expand_dims(Tensor, dim):为张量+1维



tf.pack(values, axis=0, name=”pack”): 将一个R维张量列表沿着axis轴组合成一个R+1维的张量


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


tf.sparse_to_dense:稀疏矩阵转密集矩阵


几个参数的含义:

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,seed=None,name=None):沿着value的第一维进行随机重新排列



tf.argmax | tf.argmin

tf.argmax(input=tensor,dimention=axis):找到给定的张量tensor中在指定轴axis上的最大值/最小值的位置。



tf.equal(x, y, name=None): 判断两个tensor是否每个元素都相等。返回一个格式为bool的tensor


cast(x, dtype, name=None):将x的数据格式转化成dtype.例如,原来x的数据格式是bool,那么将其转化成float以后,就能够将其转化成0和1的序列。反之也可以


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

函数返回2个参数: list_clipped,修剪后的张量,以及global_norm,一个中间计算量。当然如果你之前已经计算出了global_norm值,你可以在use_norm选项直接指定global_norm的值。

TensorFlow中纬度的计算:参考文章:TensorFlow的纬度计算

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,236评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,867评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,715评论 0 340
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,899评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,895评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,733评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,085评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,722评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,025评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,696评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,816评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,447评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,057评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,254评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,204评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,561评论 2 343

推荐阅读更多精彩内容

  • 1. tf函数 tensorflow 封装的工具类函数 | 操作组 | 操作 ||:-------------| ...
    南墙已破阅读 5,067评论 0 5
  • 在一起也很久了,却发现我们越来越谋生,越来越不信任,是我多疑了,还是你真的没把我放在心里,可能正如你所说的,我们...
    Merciess阅读 470评论 0 1
  • 怎么才称得上是压缩PDF文件的“小能手”?首先得是一款能够专业编辑PDF文件的PDF阅读编辑器,其次需要有压缩功能...
    小皇可可阅读 517评论 0 0
  • 早在两千多年前的战国时代,著名思想家孟子就提倡"老吾老以及人之老,幼吾幼以及人之幼"的博爱思想。 博爱,就是...
    言行合一阅读 1,181评论 1 2