tensorflow函数/重要功能实现

时间:2022-09-22 16:34:26

一、基础函数

1.1 、tf.reduce_sum(input_tensor, axis)   Computes the sum of elements across dimensions of a tensor,沿着维度sxis计算和

x= [[, , ], [, , ]],其秩为2

//求和,在所有维度操作,也就相当于对所有元素求和
tf.reduce_sum(x) ==> //在维度0上操作,在这个例子中实际就是按列(维度0)求和
tf.reduce_sum(x, ) ==> [, , ]
//也等价在维度-2操作
tf.reduce_sum(x, -) ==> [, , ] //在维度1上操作,在这个例子中实际就是按行(维度1)求和
tf.reduce_sum(x, ) ==> [, ]
//也等价在维度-1操作
tf.reduce_sum(x, ) ==> [, ]

1.2、tf.concat(values, axis):Concatenates tensors along one dimension, 在维度axis连接矩阵

t1 = [[, , ], [, , ]]  //2*3维
t2 = [[, , ], [, , ]] //2*3维
tf.concat([t1, t2], ) == > [[, , ], [, , ], [, , ], [, , ]]
//在维度0上连接,那么第一个维度会增加,在这里就是行会增多,结果是4*3维矩阵. x=tf.ones((,,)) //shape (3,2,2)
C=[x,x,x]
print(tf.concat(C,).shape) == > (,,)
// 再看这个例子,三维矩阵的连接,在第3个维度上,也就是维度2, 结果第三个维度会增加,也就是(3,2,6)

1.3、维度增加与删减

tf.expand_dims(input, axis=None, name=None, dim=None) :Inserts a dimension of 1 into a tensor’s shape,在第axis位置增加一个维度

tf.squeeze(input, squeeze_dims=None, name=None) Removes dimensions of size 1 from the shape of a tensor。从tensor中删除所有大小是1的维度, 如果不想删除所有尺寸1尺寸,可以通过指定squeeze_dims来删除特定尺寸1尺寸。

1.4、从tensor提取切片

tf.slice(input_, begin, size, name = None),作用是从输入数据input中提取出一块切片,切片的尺寸是size,切片的开始位置是begin。切片的尺寸size表示输出tensor的数据维度,其中size[i]表示在第i维度上面的元素个数。开始位置begin表示切片相对于输入数据input_的每一个偏移量,比如数据input是

参考 https://blog.csdn.net/qq_30868235/article/details/80849422

1.5、值压缩函数

tf.clip_by_value(A, min, max):输入一个张量A,把A中的每一个元素的值都压缩在min和max之间。小于min的让它等于min,大于max的元素的值等于max。

https://blog.csdn.net/UESTC_C2_403/article/details/72190248

1.6、张量扩展复制

tf.tile(input, multiples, name=None):

  input:待扩展的张量,A Tensor. 1-D or higher.

  multiples:扩展参数,A Tensor. Must be one of the following types: int32, int64. 1-D. Length must be the same as the number of dimensions in input。

例如input是一个3维的张量。那么mutiples就必须是一个1x3的1维张量。这个张量的三个值依次表示input的第1,第2,第3维数据扩展几倍。

参考: https://blog.csdn.net/tsyccnh/article/details/82459859

1.7、tf.where

tf.where(condition, x=None, y=None, name=None): Return the elements, either from x or y, depending on the condition.

condition、x、y维度相同,其中condition必须是bool型。当condition某个位置为true时返回x相应位置的元素,false时返回y位置的元素。

参考:https://blog.csdn.net/ustbbsy/article/details/79564828

1.8、tf.range

用于创建数字序列变量,有以下两种形式:

tf.range(limit, delta=1, dtype=None, name='range')
tf.range(start, limit, delta=1, dtype=None, name='range')

该数字序列开始于 start 并且将以 delta 为增量扩展到不包括 limit 时的最大值结束,类似python的range函数。

参考:https://www.cnblogs.com/cvtoEyes/p/9002843.html

1.9、Tensorflow 中 crf_decode 和 viterbi_decode 的使用

https://blog.csdn.net/baobao3456810/article/details/83388516

viterbi_decode 和 crf_decode 实现了相同功能,前者是numpy的实现,后者是 tensor 的实现。

二、网络层实现

2.1.  一维卷积、二维卷积

2.1.1、 一维卷积(tf.nn.conv1d)和二维卷积(tf.nn.conv1d)的比较

二维卷积是将一个特征图在width和height两个方向上进行滑窗操作,对应位置进行相乘并求和;而一维卷积则是只在width或者说height方向上进行滑窗并相乘求和。

2.2.2、  tf.nn.conv2d、tf.layers.conv2d

https://blog.csdn.net/Mundane_World/article/details/80894618

Tensorflow中很多具有相同功能的函数,有不同的API。例如,2-D卷积,目前conv2d方法就有4个:

tf.nn.conv2d, tf.layers.conv2d, tf.contrib.layers.conv2d, slim.conv2d

它们在底层都调用了gen_nn_ops.conv2d(),实际上除了参数不一样外,其它没有大的区别,都实现了同样的功能。slim.conv2d已废弃。

参考:https://blog.csdn.net/mao_xiao_feng/article/details/53444333

一维卷积示例:https://blog.csdn.net/u011734144/article/details/84066928

2.2、全连接层

//out_dim=64维,激活函数为relu
self.output_tensor = tf.layers.Dense(, activation=tf.nn.relu)(self.input_tensor)

一般都会在全连接层加Dropout 层防止过拟合,提升泛化能力。而很少见到卷积层后接Drop out (原因主要是 卷积参数少,不易过拟合),今天找了些博客,特此记录

2.3、Drop层

output_tensor = tf.layers.dropout(inputs=input_tensor,rate=dropout_rate,training=is_training) #方法1(推荐),注意rate是指训练过程中丢掉神经元的比例
output_tensor= tf.nn.dropout(input_tensor, keep_prob) #方法2, keep_prob为训练过程中神经元保留的比例

Dropout原理:在不同的训练过程中随机扔掉一部分神经元,也就是让某个神经元的激活值以一定的概率p,让其停止工作,这次训练过程中不更新权值,也不参加神经网络的计算。但是它的权重得保留下来(只是暂时不更新而已),因为下次样本输入时它可能又得工作了。Dropout 层一般加在全连接层 防止过拟合,提升模型泛化能力。而很少见到卷积层后接Drop out (原因主要是 卷积参数少,不易过拟合).

https://blog.csdn.net/qq_27292549/article/details/81092653

三、重要功能实现

3.1、tensor 标准化

3.1.1、tf.nn.l2_normalize(x, dim, epsilon=1e-12, name=None) ,对tensor利用L2范数(即欧氏距离)对指定维度 dim进行标准化。

https://blog.csdn.net/abiggg/article/details/79368982

3.2、对网络层正则化

在损失函数上加上正则项是防止过拟合的一个重要方法。tensorflow中对参数使用正则项分为两步:

a) 创建一个正则方法(函数/对象)
b) 将这个正则方法(函数/对象),应用到参数上

L2正则函数 tf.contrib.layers.l2_regularizer(scale, scope=None),scale: 正则项的系数,scope: 可选的scope name。L1正则类似。

使用过程示例:

//第一种方式
//1. 定义正则函数
l2_regularizer = tf.contrib.layers.l2_regularizer(scale=0.1) //2. 在网络层(全连接层)应用L2正则
self.fc1 = tf.layers.Dense(units=
,activation=tf.nn.relu
,kernel_initializer=tf.contrib.layers.xavier_initializer()
,bias_initializer=tf.zeros_initializer()
,kernel_regularizer=l2_regularizer)(self.input) //3. 在loss函数加入L2正则损失
self.l2_loss = tf.losses.get_regularization_loss() // 使用get_regularization_loss函数获取定义的全部L2 loss
self.ori_loss = ... //正常的损失函数
self.loss = self.ori_loss + self.l2_reg_lambda * self.l2_loss //在最终的 loss中加入L2 loss //第二种方式
//1. 定义L2 loss变量
l2_loss = tf.constant(0.0)
//2. 在网络层(全连接层)应用L2正则
with tf.name_scope("fc1"):
W = tf.get_variable(
"W_hidden",
shape=[size1, size2],
initializer=tf.contrib.layers.xavier_initializer())
b = tf.Variable(tf.constant(0.1, shape=[self.hidden_dim]), name="b")
l2_loss += tf.nn.l2_loss(W)
l2_loss += tf.nn.l2_loss(b)
self.fc1_output = tf.nn.relu(tf.nn.xw_plus_b(self.input, W, b, name="fc1_output ")) //3. 在loss函数加入L2正则损失
self.ori_loss = ... //正常的损失函数
self.loss = self.ori_loss + self.l2_reg_lambda * self.l2_loss //在最终的 loss中加入L2 loss

参考 https://*.com/questions/44232566/add-l2-regularization-when-using-high-level-tf-layers

https://zhuanlan.zhihu.com/p/27994404

3.3、Batch Normalization 批规范化

构建方式

//示例,对全连接层使用batch normalization
with tf.variable_scope('fc1', reuse=tf.AUTO_REUSE):
liner = tf.layers.Dense(, activation=None)(self.input)
norm_liner = tf.layers.batch_normalization(liner, training=is_training)
self.fc1 = tf.nn.relu(norm_liner)

参考:http://ai.51cto.com/art/201705/540230.htm

https://www.cnblogs.com/guoyaohua/p/8724433.html

3.4、残差

https://zhuanlan.zhihu.com/p/42706477 待

tensorflow函数/重要功能实现的更多相关文章

  1. 在Excel中使用频率最高的函数的功能和使用方法

    在Excel中使用频率最高的函数的功能和使用方法,按字母排序: 1.ABS函数 函数名称:ABS 主要功能:求出相应数字的绝对值. 使用格式:ABS(number) 参数说明:number代表需要求绝 ...

  2. matlab中subplot函数的功能

    转载自http://wenku.baidu.com/link?url=UkbSbQd3cxpT7sFrDw7_BO8zJDCUvPKrmsrbITk-7n7fP8g0Vhvq3QTC0DrwwrXfa ...

  3. 【原创】Matlab中plot函数全功能解析

    [原创]Matlab中plot函数全功能解析 该帖由Matlab技术论(http://www.matlabsky.com)坛原创,更多精彩内容参见http://www.matlabsky.com 功能 ...

  4. 【转】如何开启notepad++函数列表功能

    原文网址:http://jingyan.baidu.com/article/4b07be3c41e05e48b380f3f6.html Notepad++是window下特有的一款开源编辑器软件,相信 ...

  5. Matlab中plot函数全功能解析

    Matlab中plot函数全功能解析 功能 二维曲线绘图 语法 plot(Y)plot(X1,Y1,...)plot(X1,Y1,LineSpec,...)plot(...,'PropertyName ...

  6. 如何在不使用系统函数的情况下实现PHP中数组系统函数的功能

    PHP中为我们提供了各种各样的系统函数来实现我们需要的各种功能,那么,在不使用系统函数的情况下我们要怎样来实现这些功能呢?以下就是几种系统函数的实现方式. 首先,我们来定义一个数组: $arr= ar ...

  7. C:函数:功能:实现字符数组中所有字母的倒序存放并输出

    前两天小测碰到一道题,建立一个函数,功能:实现字符数组中所有字母的倒序存放并输出,一开始觉得简单跟数字数组差不多,运行一下发现很多格式错误,这些是不必要的错误,现在就来说下,先说一下代码思路:定义一个 ...

  8. Tensorflow函数——tf.variable_scope()

    Tensorflow函数——tf.variable_scope()详解 https://blog.csdn.net/yuan0061/article/details/80576703 2018年06月 ...

  9. tensorflow函数解析:Session.run和Tensor.eval的区别

    tensorflow函数解析:Session.run和Tensor.eval 翻译 2017年04月20日 15:05:50 标签: tensorflow / 机器学习 / 深度学习 / python ...

随机推荐

  1. PAT 1005. 继续(3n+1)猜想 (25) JAVA

    当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推过程中遇到的每一个数.例如对n=3进行验证的时候,我们需要计算3.5.8.4.2.1,则当我们对n=5.8.4.2进行验证的时候,就可以直接 ...

  2. 专门为码农定制的14款创意的T裇(T-Shirt)设计

    T裇衫是人们在各种场合都可穿着的服装,如在T裇衫上作适当的装饰,即可增添无穷的韵味.通过图案直接反映人类的精神风貌,你可以把日常生活中的兴趣.习惯.喜怒哀乐.嗜好等展露无疑,张扬个性.秀出自我.对于码 ...

  3. WCF入门(十二)---WCF异常处理

    WCF服务开发者可能会遇到需要以适当的方式向客户端报告一些不可预见的错误.这样的错误,称为异常,通常是通过使用try/catch块来处理,但同样,这是非常具体的技术. 由于客户端的关注领域不是关于如何 ...

  4. hadoop错误org.apache.hadoop.yarn.exceptions.YarnException Unauthorized request to start container

    错误: 14/04/29 02:45:07 INFO mapreduce.Job: Job job_1398704073313_0021 failed with state FAILED due to ...

  5. ajax的封装

    ajax是前端工程中与后台进行数据交互的一门重要技术,通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新.jquer ...

  6. .Net将多个DLL打包为一个DLL(ILMerge)

    在做.Net底层编码过程中,为了功能独立,有可能会生成多个DLL,引用时非常不便.这方面微软提供了一个ILMerge工具原版DOS工具,可以将多个DLL合并成一个.下载完成后需要安装一下,然后通过DO ...

  7. DNS开源服务器BIND最小配置详解<转>

    一,简介 相对于存储和大数据领域,CDN是一个相对小的领域,但行行出状元,BIND就是CDN领域的蝉联N届的状元郎.BIND是一款非常常用的DNS开源服务器,全球有90%的DNS用BIND实现.值得一 ...

  8. 获取当前网页的绝对URL地址

    通过创建一个虚拟的<a></a>元素,将它的href指定为相对URL,再读取它的href就会得到绝对URL. var getAbsoluteUrl = (function() ...

  9. Python3基础 list &plus; &ast;运算 扩充列表

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  10. &period;Net Core与跨平台时区

    由于开发者不熟悉不同操作系统管理时区的方式,当用.Net Core开发与时区相关的应用运行在不同操作系统上会出现错误.这片文章将会探索一下在不同操作系统上用.Net Core 使用时区信息出现的问题与 ...