没有合适的资源?快使用搜索试试~ 我知道了~
首页tensorflow Slim教程
tensorflow Slim教程
需积分: 50 339 浏览量
更新于2023-05-26
评论
收藏 48KB DOCX 举报
tensorflow slim的详细讲解,主要包括TensorFlow-Slim,Training Models,Fine-Tuning Existing Models,Evaluating Models几个部分
资源详情
资源评论
资源推荐

TensorFlow-Slim
是 中一个轻量级的库,用于定义、训练和评估复杂的模型。 中
的组件可以与 中原生的函数一起使用,与其他的框架,比如与
也可以一起使用。
Usage 使用方法
import tensorow.contrib.slim as slim
Why TF-Slim?
可以使建立、训练和评估神经网络更加简单。
允许用户通过减少模板代码使得模型更加简洁。这个可以通过使用
和
大量的高层 、 来实现;
通过使用常用的正则化(Q)使得建立模型更加简单;
一些广泛使用的计算机视觉相关的模型(比如 , !)已经在 中定义好了,
用户可以很方便的使用;这些既可以当成黑盒使用,也可以被扩展使用,比如添加一些
“"#$到不同的内部的层;
使得扩展复杂模型变得容易,可以使用已经存在的模型的 "% 来开始训练算
法。
What are the various components of TF-Slim?
由几个独立存在的组件组成,主要包括以下几个:
&:提供一个新的作用域(),称为 &,在该作用域()中,
用户可以定义一些默认的参数,用于特定的操作;
#:包含 的 # 定义,##,&#,
和Q##;
:包含用于模型评估的常规函数;
:包含用于建立模型的高级 ;
:包含一些用于训练模型的常规函数;
:包含一些用于 的函数;
:包含一些热门的评价标准;

:包含一些热门的网络定义,如 , ! 等模型;
':提供一个内容管理者,使得可以很容易、很安全地启动和关闭 ();
:包含权重正则化;
:提供一个方便的封装,用于变量创建和使用。
Dening Models
使用 ,结合 *和Q,模型可以很简洁地被定义。这些元
件定义如下。
Variables
在原生的 中,创建 需要一个预定义的值或者一种初始化机制(比
如从一个高斯分布中随机采样)。此外,如果一个变量需要在一个特定的设备上(如 +,)创
建,那么必须被明确说明。为了减少变量创建所需的代码, 提供了一些封装函数(定
义在
中),可以使得用户定义变量变得简单。
举个例子,定义一个权重(")变量,使用一个截断的正态分布来初始化,使用 -
正则化,并将该变量放置在 .+, 中,我们只需要声明如下:
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')
注意到,在原生的 中,有两种类型的 ,和Q
/0。绝大部分变量是 ,一旦被创建,可以使用
来将这些变量保存到磁盘中;1 是那些仅仅存在于一个 内,并
不会被保存到磁盘中。
通过定义 model variables 来进一步区别变量,这些是表示一个模型参数的变
量。2# 在学习期间被训练或者 3#,在评估或者推断期间可以从一个
"% 中加载。模型变量包括使用 &#或者Q-# 创建的变
量等。非模型变量(!#)指的是那些在学习或者评估阶段使用但是在实际
的 中不需要用到的变量。比如说,& 在学习和评估阶段会用到的变量,
但是实际上并不是模型的一部分。类似的, 也是非模型变量。
# 和 在 中很容易地被创建和恢复:
# Model Variables

weights = slim.model_variable('weights',
shape=[10, 10, 3 , 3],
initializer=tf.truncated_normal_initializer(stddev=0.1),
regularizer=slim.l2_regularizer(0.05),
device='/CPU:0')
model_variables = slim.get_model_variables()
# Regular variables
my_var = slim.variable('my_var',
shape=[20, 1],
initializer=tf.zeros_initializer())
regular_variables_and_model_variables = slim.get_variables()
这是如何工作的呢?当你通过 的 或者直接通过 #& 函
数创建一个模型的变量时, 将变量添加到 "425671&)8917 集
合中。如果你想拥有自己定制化的 或者 创建机制,但是仍然想利用
来管理你的变量,此时, 提供一个方便的函数,用于添加模型的变量到集合中:
my_model_variable = CreateViaCustomCode()
# Letting TF-Slim know about the additional variable.
slim.add_model_variable(my_model_variable)
Layers
在原生的 中,要定义一些层(比如说卷积层,全连接层,9"! 层
等)是比较麻烦的。举个例子,神经网络中的卷积层由以下几个步骤组成:
: 创建权重和偏置变量
- 将输入与权重做卷积运算
; 将偏置加到第二步的卷积运算得到的结果中
< 使用一个激活函数
上面的步骤使用原始的 代码,实现如下:
input = ...
with tf.name_scope('conv1_1') as scope:
kernel = tf.Variable(tf.truncated_normal([3, 3, 64, 128],
dtype=tf.oat32,
stddev=1e-1), name='weights')
conv = tf.nn.conv2d(input, kernel, [1, 1, 1, 1], padding='SAME')
biases = tf.Variable(tf.constant(0.0, shape=[128],
dtype=tf.oat32),

trainable=True, name='biases')
bias = tf.nn.bias_add(conv, biases)
conv1 = tf.nn.relu(bias, name=scope)
为了减少重复代码, 提供了一些方便高级别更抽象的神经网络层。比如说,卷积
层实现如下:
input = ...
net = slim.conv2d(input, 128, [3, 3], scope='conv1_1')
提供了大量的标准的实现,用于建立神经网络。包括如下函数:
Layer TF-Slim
BiasAdd slim.bias_add
BatchNorm slim.batch_norm
Conv2d slim.conv2d
Conv2dInPlane slim.conv2d_in_plane
Conv2dTranspos
e (Deconv)
slim.conv2d_transpose
FullyConnected slim.fully_connected
AvgPool2D slim.avg_pool2d
Dropout slim.dropout
Flatten slim.atten
MaxPool2D slim.max_pool2d
剩余18页未读,继续阅读

















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

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

评论0