tensorflow常用函数(二)
一、变量相关的函数
1)tf.train.list_variables(ckpt_dir_or_file) Returns list of all variables in the checkpoint
2)tf.global_variables_initializer() 用于初始化所有的变量(GraphKeys.VARIABLES),替代 tf.initialize_all_variables()。
3)tf.Variable(initial_value=None, trainable=True, collections=None, validate_shape=True, caching_device=None, name=None, variable_def=None, dtype=None, expected_shape=None, import_scope=None)
trainable: 默认为`True`,则默认值也将变量添加到图形中集合`GraphKeys.TRAINABLE_VARIABLES`。#这个集合用作“Optimizer”类使用的默认变量列表。
collections:图表集合键的列表。新的变量被添加到这些集合。默认为`[GraphKeys.GLOBAL_VARIABLES]`)
用于生成一个初始值为initial-value的变量;必须指定初始化值
4)tf.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,constraint=None)
获取已存在的变量(要求不仅名字,而且初始化方法等各个参数都一样),如果不存在,就新建一个;可以用各种初始化方法,不用明确指定值。
推荐使用tf.get_variable():
- 初始化方便
- 方便共享变量,因为
tf.get_variable()
会检查当前命名空间下是否存在同样name的变量,可以方便共享变量。而tf.Variable
每次都会新建一个变量
需要注意的是tf.get_variable()
,要配合reuse
和tf.variable_scope()
使用,对于get_variable()
来说,如果已经创建的变量对象,就把那个对象返回,如果没有创建变量对象的话,就创建一个新的。
5)tf.name_scope() 此函数作用是共享变量。在一个作用域scope内共享一些变量,简单来说,就是给变量名前面加个变量空间名,只限于tf.Variable()的变量。
6)tf.variable_scope() 和tf.name_scope()作用一样,不过包括tf.get_variable()的变量和tf.Variable()的变量。在同一个程序中多次调用,在第一次调用之后需要将reuse参数设置为True,简而言之,reuse=False时,在scope下面创建变量,reuse=True时,在scope下面获取已有变量。
with tf.variable_scope("one"):
a = tf.get_variable("v", [1]) #默认reuse=False,创建了一个变量,a.name == "one/v:0" with tf.variable_scope("one"):
b = tf.get_variable("v", [1]) #创建两个名字一样的变量会报错 ValueError: Variable one/v already exists ,这个时候reuse=False,你只能新创建变量,不能get已有变量 with tf.variable_scope("one", reuse = True): #注意reuse的作用。
c = tf.get_variable("v", [1]) #c.name == "one/v:0" 成功共享引用了已有变量,因为设置了reuse=True
7) tf.train.init_from_checkpoint (ckpt_dir_or_file,assignment_map) #从checkpoint中加载已训练好的参数
ckpt_dir_or_file:.ckpt模型的路径 assignment_map:字典类型,key为要恢复的变量名
二、梯度相关
1)global_step
global_step在训练中是计数的作用,每训练一个batch就加1。主要在滑动平均、优化器、指数衰减学习率等方面有用到。实际意义就是代步全局的步数,像一个钟表一样告知优化函数在进行到多少步应该进行什么操作。例如:指数衰减的学习率就是随着迭代步数的增加而逐步衰减的。
2)tf.gradients()
计算梯度的函数,要注意的是,xs
中的x
必须要与ys
相关,不相关的话,会报错。
w1 = tf.Variable([[1,2]]) res = tf.matmul(w1,[[2],[1]]) grads = tf.gradients(res,w1) with tf.Session() as sess:
tf.global_variables_initializer().run()
print(sess.run(grads)) 因为res=2*x+y ,所以
返回结果:[2,1]
3)tf.clip_by_global_norm (t_list, clip_norm, use_norm=None, name=None) 梯度截取函数,梯度截取主要是为了防止梯度爆炸。
t_list
是梯度张量, clip_norm
是截取的比率
截取公式:t_list[i] * clip_norm / max(global_norm, clip_norm)
其中global_norm = sqrt(sum([l2norm(t)**2 for t in t_list])),
global_norm
是所有梯度的平方和,如果 clip_norm > global_norm
,就不进行截取。
三、优化相关
1) tf.train.GradientDescentOptimizer() 使用随机梯度下降算法,使参数沿着 梯度的反方向,即总损失减小的方向移动,实现更新参数
minimize()用法
opt = GradientDescentOptimizer(learning_rate=0.1)
# Add Ops to the graph to minimize a cost by updating a list of variables.
# "cost" is a Tensor, and the list of variables contains tf.Variable objects.
opt_op = opt.minimize(cost, var_list=<list of variables>)
# Execute opt_op to do one step of training:
opt_op.run()
minimize包含两个步骤:
① 梯度计算
② 将计算出来的梯度应用到变量的更新中
这两个步骤也可以拆开使用,拆开的好处是,可以对计算的梯度进行限制,防止梯度消失和爆炸。
创建一个optimizer.
opt = GradientDescentOptimizer(learning_rate=0.1) # 计算<list of variables>相关的梯度
grads_and_vars = opt.compute_gradients(loss, <list of variables>) # grads_and_vars为tuples (gradient, variable)组成的列表。
#对梯度进行想要的处理,比如cap处理
capped_grads_and_vars = [(MyCapper(gv[0]), gv[1]) for gv in grads_and_vars] # 令optimizer运用capped的梯度(gradients)
opt.apply_gradients(capped_grads_and_var
- 使用函数compute_gradients()计算梯度
- 按照自己的愿望处理梯度
- 使用函数apply_gradients()应用处理过后的梯度
2) tf.train.AdamOptimizer() 是利用自适应学习率的优化算法
Adam 算法和随 机梯度下降算法不同。随机梯度下降算法保持单一的学习率更新所有的参数,学习率在训练过程中并不会改变。而 Adam 算法通过计算梯度的一阶矩估计和二 阶矩估计而为不同的参数设计独立的自适应性学习率,也就是学习率可以动态调整。
with
关键字可以让在这个上下文环境中的操作都在control_inputs
执行。with tf.control_dependencies([train_step, variable_averages_op]):
train_op = tf.no_op(name='train')
train_op运行之前必须先执行train_step,variable_averages_op。tf.no_op()表示执行完 train_step, variable_averages_op 操作之后什么都不做。
2)tf.nn.dropout(x, keep_prob, noise_shape=None, seed=None, name=None)
- x:输入
- keep_prob:保留比例。 取值 (0,1] 。每一个参数都将按这个比例随机变更
3)tf.layers.dense(
inputs, #输入该网络层的数据
units, #输出的维度大小,改变inputs的最后一维
activation=None, #激活函数,即神经网络的非线性变化,None的话就表示线性 。eg:tf.tanh
use_bias=True, #使用bias为True(默认使用),不用bias改成False即可,是否使用偏置项
kernel_initializer=None, ##卷积核的初始化器
bias_initializer=tf.zeros_initializer(), ##偏置项的初始化器,默认初始化为0
kernel_regularizer=None, ##卷积核的正则化,可选
bias_regularizer=None, ##偏置项的正则化,可选
activity_regularizer=None, ##输出的正则化函数
kernel_constraint=None,
bias_constraint=None,
trainable=True,
name=None, ##层的名字
reuse=None ##是否重复使用参数)
该函数表示添加了一个全连接层。
tensorflow常用函数(二)的更多相关文章
- 深度学习TensorFlow常用函数
tensorflow常用函数 TensorFlow 将图形定义转换成分布式执行的操作, 以充分利用可用的计算资源(如 CPU 或 GPU.一般你不需要显式指定使用 CPU 还是 GPU, Tensor ...
- TensorFlow 常用函数汇总
本文介绍了tensorflow的常用函数,源自网上整理. TensorFlow 将图形定义转换成分布式执行的操作, 以充分利用可用的计算资源(如 CPU 或 GPU.一般你不需要显式指定使用 CPU ...
- TensorFlow 常用函数与方法
摘要:本文主要对tf的一些常用概念与方法进行描述. tf函数 TensorFlow 将图形定义转换成分布式执行的操作, 以充分利用可用的计算资源(如 CPU 或 GPU.一般你不需要显式指定使用 CP ...
- tensorflow常用函数解析
一.tf.transpose函数的用法 tf.transpose(input, [dimension_1, dimenaion_2,..,dimension_n]):这个函数主要适用于交换输入张量的不 ...
- TensorFlow常用函数
[1]卷积层(Convolutional Layer),构建一个2维卷积层,常用的参数有 conv = tf.layers.conv2d( inputs=pool, filters=64, kerne ...
- Tensorflow常用函数说明(一)
首先最开始应该清楚一个知识,最外面的那个[ [ [ ]]]括号代表第一维,对应维度数字0,第二个对应1,多维时最后一个对应数字-1:因为后面有用到 1 矩阵变换 tf.shape(Tensor) 返回 ...
- tensorflow常用函数解释
从二维数组中选一个矩形 import tensorflow as tf data = [[1,2,3,4,5,6,7,8],[11,12,13,14,15,16,17,18]] x = tf.stri ...
- Tensorflow常用函数说明
1.矩阵操作 1.1矩阵生成 这部分主要将如何生成矩阵,包括全0矩阵,全1矩阵,随机数矩阵,常数矩阵等 sess=tf.InteractiveSession() #x=tf.ones([2,3],tf ...
- tensorflow常用函数库
归一化函数: def norm_boxes(boxes, shape): """Converts boxes from pixel coordinates to norm ...
随机推荐
- Ubuntu环境下载程序到STM32
1 JLink方式 1.0 下载JLink 传送门:SEGGER官网 图1.0 下载JLink 1.2 安装JLink 双击打开下载文件:JLink_Linux_V644i_x86_64.deb 1. ...
- 笔记4:WEB服务器
web服务器 1 HTTP协议 http:超文本传输协议,基于tcp的方式,会更稳当更安全.协议就是规定了怎样去请求服务器,服务器如何返回信息.如下图红色方框标记所示: 打开浏览器电商广告原理: 我们 ...
- 两道DP,四年修一次路
第十一届:山区修路 题目描述 SNJ位于HB省西部一片群峰耸立的高大山地,横亘于A江.B水之间,方圆数千平方公里,相传上古的神医在此搭架上山采药而得名.景区山峰均在海拔3000米以上,堪称" ...
- 201871010112-梁丽珍《面向对象程序设计(java)》第二周学习总结
项目 内容 这个作业属于哪个课程 <任课教师博客主页链接>https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 <作业链接地址>http ...
- 虚拟机安装后配置IP地址
BOOTPROTO=static #启动的方式,dhcp表示自动获取,static表示静态ONBOOT=yes #是否开机启动,yes表示开机启动IPADDR #设置IP,和vmware在同 ...
- 文件处理file handling
#1. 打开文件,得到文件句柄并赋值给一个变量 #2. 通过句柄对文件进行操作 #3. 关闭文件 #1.open函数打开文件,open找的是系统的编码gbkf = open("陈粒" ...
- 生产者消费者模型-Java代码实现
什么是生产者-消费者模式 比如有两个进程A和B,它们共享一个固定大小的缓冲区,A进程产生数据放入缓冲区,B进程从缓冲区中取出数据进行计算,那么这里其实就是一个生产者和消费者的模式,A相当于生产者,B相 ...
- docker odoo启动比较完整的命令
docker run --name odoo12 -p : -p : -v /root/workspace/odoo-addons/:/mnt/extra-addons -v /root/worksp ...
- TCP/UDP通信中server和client是如何知道对方IP地址的
在TCP通信中 client是主动连接的一方,client对server的IP的地址提前已知的.如果是未知则是没办法通信的. server是在accpet返回的时候知道的,因为数据包中包含客户端的IP ...
- [NOIP2015]运输计划 线段树or差分二分
目录 [NOIP2015]运输计划 链接 思路1 暴力数据结构 思路2 二分树上差分 总的 代码1 代码2 [NOIP2015]运输计划 链接 luogu 好久没写博客了,水一篇波. 思路1 暴力数据 ...