没有合适的资源?快使用搜索试试~ 我知道了~
首页Tensorflow-slim用法总结
Tensorflow-slim用法总结
需积分: 33 398 浏览量
更新于2023-05-26
评论 1
收藏 1.72MB DOCX 举报
Tensorflow-slim.doc总结了slim的常用使用方法,它属于一个高级API接口,可以大大简化代码
资源详情
资源评论
资源推荐

Tensorow slim
TensorFlow-Slim
TF-Slim 是一个用于定义、训练、和评估复杂模型的 TensorFlow 高级库。tf-slim 能与原生 tensorow 和其他高层框架(如
tf.contrib.learn 等)混合使用。
使用 Tf-Slim
import tensorow as tf
import tensorow.contrib.slim as slim
为什么使用 tf-slim?
TF-Slim 是一个能够简化神经网络的构建、训练和评估流程的高级库 :
通过消除模板化代码,使得用户定义模板的过程变得更加简洁。这是通过参数的作用域和大量高级网络层和变量的定
义来实现的。这些工具能够增加代码的可读性、稳定性,减少超参复制粘贴过程中出错的可能性,同时简化了超参的
调节过层。
提供内置的正则化选项,使得模型开发更加简单
已经实现好的几个常见图像模型(如 VGG,AlexNet 等)。一方面用户可以吧这些模型当作黑匣子来使用,另一方
面,通过在不同的中间层加"multiple heads",这些模型能以多种方式进行扩展。
通过调用预训练的参数,缩短训练时间,Slim 能够轻松地实现复杂的模型。
Tf-slim 包含那些组件?
Tf-Slim 包含多个独立的组成部件,主要包括:
arg_scope:在该参数作用域内,用户可以为特定操作类型定义默认参数。
data:保含了 tf-slim 对于数据集的定义、数据提供者、并行读取和解码工具。
evaluation:包含了模型的评估模板
layers:包含了经过封装的高级网络层,用于构建 tensorow 模型。
learning:包含了模型的训练模板
losses:包含了常用的损失函数
metrics:包含了常用的评估指标
nets:包含了常用的网络模型如 VGG、AlexNet 等等
quenes:包含一个上下文管理机制,用于安全地开启和关闭 QueueRunners
regularizers:包含了正则化选项
variables:包含一些装饰器,用于构造和处理变量
定义模型
通过对变量、网络层和作用域进行组合,tf-slim 能成功构建神经网络模型。不同组件的定义如下。
变量
在原生 tensorow 代码中,创建一个变量需要一个初始化机制(如高斯分布、均匀分布等),或者一个已经定义过的变量。
此外,变量使用的硬件(GPU 或 CPU)必须被明确指定。为了简化创建变量的代码,tf-slim 在文件 variables.py 中提供了
一系列的装饰函数。例如,创建一个权重变量,用 truncated normal distribution 来初始化,并添加 L2 正则化项,且指
定其在 CPU 上运行,我们只需要如下代码:
weights=slim.variable('weights', shape=[10,10,3,3],
initializer=tf.truncated_normal_initializer(stddev=0.1),
regularizer=slim.l2_regularizer(0.05),
device='/CPU:0')
值得注意的是,在原生 tensorow 中,有两种变量:常规变量和局部(临时)变量。其中大部分变量都是常规变量:一旦
创建,这些变量就能通过 savar 存储到磁盘中。局部变量则只存在于会话(session)期间,无法被保存。
tf-slim 通过定义表示模型参数的模型变量(model variables),进一步对变量进行了区分。模型变量在训练过层中被调
整,在评估和推断过层中通过加载点(checkpoint)来加载。模型变量包括由 slim.fully_connected 或 slim.conv2d 创建
的变量等。非模型变量则只是在训练和评估过层中被使用,在实际推断过层中则不使用。例如,global_step 就是一个非模
型变量,只是用于对模型的训练,但它不属于最终模型的组成部分。同样地,moving average variables(滑动平均相关
的变量)会影响模型变量的取值,但他们本身不属于模型变量。
这两种变量在都能在 tf-slim 中被创建和检索:
#model variables
model_weights = slim.model_variable('model_weights', shape=[10,10,3,3],
initializer=tf.truncated_normal_initializer(stddev=0.1),
regularizer=slim.l2_regularizer(0.05),
device='/CPU:0')
#regular variables
model_variables=slim.get_model_variables()
my_var = slim.variable('my_var', shape=[20,1],
initializer=tf.zeros_initializer())
regular_variables_and_model_variables = slim.get_variables()
这是如何运作的呢?当你通过 tf-slim 的 layers 或者 slim.model_variable 函数创建一个模型变量时,tf-slim 自动将该变
量加入集合 tf.GraphKeys.MODEL_VARIABLES 中。如果你想自定义 layers 或者变量,但是仍然希望 tf-slim 管理这些模
型变量,应该怎么做呢?tf.slim 提供了简单的函数用于将自定义变量加入模型变量集合:

my_model_variable=CreateViaCustomCode() #letting tf-slim konw about the additianal variable.
slim.add_model_variable(my_model_variable)
网络层(layers)
一方面,tensorow 的操作集合包含内容很多;另一方面,神经网络开发者往往倾向考虑高层概
念"layers","losses","metrics"和"networks"等等。一个网络层,如卷积层、全连接层、BatchNorm Layer 等往往比一
个单一的 tensorow 操作(operation)更加抽象,并且一般涉及多个操作。此外,与原始的操作不同,一个 layer 通常包
含与之相关的可调整变量。例如,一个卷积层一般包括如果几个基本操作:
创建权重变量和偏置变量
将前一网络层的输出与本层权重矩阵做卷积
将卷积的结果与偏置矩阵相加
添加激活函数
如果使用原生 tensorow 代码来实现,这会耗费大量的精力:
为了减少重复的代码,tf-slim 提供了一些神经网络层级别的更加高级的操作。例如,上文的代码转换为 tf-slim 代码如下:
input =...
net = slim.conv2d(input,128,[3,3],scope='conv1_1')
Tf-Slim 为大量的高级神经网路组件提供了标准实现,这些包括:
Layer TF-Slim
BiasAdd slim.bias_add
BatchNorm slim.batch_norm
Conv2d slim.conv2d
Conv2dInPlane slim.conv2d_in_plane
Conv2dTranspose(Deconv
)
slim.conv2d_transpos
e
FullyConnected slim.fully_connected
AvgPool2D slim.avg_pool2d
Dropout slim.dropout
Flatten slim.atten
MaxPool2D slim.max_pool2d
OneHotEncoding
slim.one_hot_encodin
g
SeparableConv2
slim.separable_conv2
d
UnitNorm slim.unit_norm
Tf-Slim 同时提供两种元操作(meta-operations),分别是 repeat 和 stack,他们允许用户重复执行相同的操作。例如,考
虑如下部分 VGG 网络,该部分由卷积层和池化层组成:
tf-slim 的 repeat 的操作则使得代码更加简单:
net = slim.repeat(net, 3, slim.conv2d, 256, [3, 3], scope='conv3')
net = slim.max_pool2d(net, [2, 2], scope='pool2')
注意到 slim.repeat 不仅仅是重复执行该行代码中相同的参数,它也足够智能,能够根据迭代次数对 slim.conv2d 所创建的
子网络层的作用域进行适当修改。具体来说,上述代码中,作用域将分别被命名为'conv3/conv3_1','conv3/
conv3_2'和'conv3/conv3_3'。此外,tf-slim 的 slim.stack 操作允许调用者将同一个操作赋予不同的参数值,进行迭代并
最终创建一个包含多个网络层的栈。slim.stack 同时会为每个操作创建一个新的 tf.variable_scope。例如,一个创建多层
感知器的方法如下:

在这个例子中,slim.stack 调用了三次 slim.fully_connected,分别将输入进行处理并向后传递。然而,不同网络层的节
点数是不一样的(分别为 32,64,128)。同样地,我们可以用 stack 来简化构建多层卷积层的过程:
作用域
作为对 tensorow 作用域机制(name_scope, variable_scope)的补充,tf-slim 增加了一个新的作用域机制
arg_scope,这个新的作用域允许用户指定一个或多个操作以及一系列参数,这些参数在上述 arg_scope 中被传递给对应的
操作。这个功能最好用例子来描述,考虑如下代码段:
很明显,上述三个卷积层包含很多相同的超参。其中两个有相同的填充模式,三个都包含相同的 weights_initializer 和
weight_regularizer。这段代码很难阅读,且包含许多可被省略的重复值。一个解决方案是设定默认值:
这个方法确保了每个卷积分层包行相同的参数值,但是不能有效减少代码量。通过使用 arg_scope,我们能在减少代码的同
时,保证每层使用同样的参数值:
剩余11页未读,继续阅读


















lizhaodonglizhaodon
- 粉丝: 0
- 资源: 11
上传资源 快速赚钱
我的内容管理 收起
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助

会员权益专享
最新资源
- Xilinx SRIO详解.pptx
- Informatica PowerCenter 10.2 for Centos7.6安装配置说明.pdf
- 现代无线系统射频电路实用设计卷II 英文版.pdf
- 电子产品可靠性设计 自己讲课用的PPT,包括设计方案的可靠性选择,元器件的选择与使用,降额设计,热设计,余度设计,参数优化设计 和 失效分析等
- MPC5744P-DEV-KIT-REVE-QSG.pdf
- 通信原理课程设计报告(ASK FSK PSK Matlab仿真--数字调制技术的仿真实现及性能研究)
- ORIGIN7.0使用说明
- 在VMware Player 3.1.3下安装Redhat Linux详尽步骤
- python学生信息管理系统实现代码
- 西门子MES手册 13 OpcenterEXCR_PortalStudio1_81RB1.pdf
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制

评论0