tensorflow-Slim

在学习过程中参考了知乎文章TensorFlow中Slim模块简单来说,TF-Slim 能使神经网络的构建、训练和评估更简单。通过利用 TF-Slim 合并 variables, layers 以及 scopes,模型可以简洁地进行定义。使用Slim定义变量TF-Slim 在 variables.py 中提供了一批轻量级的函数封装,因此可以更加容易地定义变量。例如,创建一个 weight 变...
摘要由CSDN通过智能技术生成

在学习过程中参考了知乎文章TensorFlow中Slim模块
简单来说,TF-Slim 能使神经网络的构建、训练和评估更简单。通过利用 TF-Slim模块,神经网络的结构可以简洁地进行定义。

使用Slim定义变量

TF-Slim 在 variables.py 中提供了一批轻量级的函数封装,因此可以更加容易地定义变量。
例如,创建一个 weight 变量,并且用 truncated_normal 初始化,用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')

TF-Slim通过定义model variables可以进一步区分变量,这种变量代表一个模型的参数,也称为模型变量。模型变量在学习阶段被训练或微调,在评估和预测阶段从checkpoint中加载。比如通过slim.fully_connected 和slim.conv2d进行创建的变量。
非模型变量是在学习或评估阶段使用,但不会在预测阶段起作用的变量。例如 global_step,它在学习和评估阶段使用,但不是模型的一部分。
通过 TF-Slim,模型变量和常规变量都可以很容易地创建和获取:

# 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()

当通过 slim.conv2d等层创建函数 或者直接通过slim.model_variable函数创建一个模型变量时,TF-Slim会把这个变量添加到tf.GraphKeys.MODEL_VARIABLES这个集合中。TF-Slim 提供了一个很方便的函数可以将模型的变量添加到集合中:

my_model_variable = CreateViaCustomCode()

# Letting TF-Slim know about the additional variable.
slim.add_model_variable(my_model_variable)

调用方法

import tensorflow as tf
slim = tf.contrib.slim

使用Slim模块创建层

一个层,比如卷积层、全连接层或 BatchNorm 层,要比一个单独的 tensorflow操作符更抽象,并且通常会包含若干操作符。此外,和原始操作符不同,一个层经常(不总是)有一些与自己相关的变量(可调参数)有联系。

卷积层

以卷积层为例,一个卷积层由许多底层操作符组成:

1. 创建权重w、偏置b变量
2. 将来自上一层的数据和权值进行卷积
3. 在卷积结果上加上偏置
4. 应用激活函数

下面是使用普通的tensorflow代码:

input = ...
with tf.name_scope('conv1_1') as scope:
    kernel = tf.Variable(tf.truncated_normal([3, 3, 64, 128], dtype=tf.float32,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.float32),trainable=True, name='biases')
    bias = tf.nn.bias_add(conv, biases)
    conv1 = tf.nn.relu(bias, name=scope)

TF-Slim在更抽象的神经网络层的层面上提供了大量方便使用的操作符。使用TF-Slim代码进行一个卷积层的定义如下:

input = ..
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值