初探 tf-slim

tf-slim 是tensorflow的一个轻量级库,它封装了对大量tensorflow的相关概念。如,网络、变量、权重等。
使用slim可以帮助我们减少样板代码的书写,从而增强代码的可读可维护性,同时slim可以和其他tensorflow
高低层接口无缝衔接,具有很大的灵活性。
这篇文章,我们先熟悉slim的基本思路和概念,在大体上把握slim的使用。

英文介绍请见github

转载请注明出处。

使用slim想要达到的效果

slim是一类高层接口,它可以将网络、loss、正则化等概念有调理的组织起来,而不是像原生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)

这里包含了命名空间、网络、偏置项、权重变量等许多需要关心的概念,修改起来也会很不方便,如果使用slim,将书写如下:

input = ...
net = slim.conv2d(input, 128, [3, 3], scope='conv1_1')

代码变得轻松许多。

Slim 编码思路的掌握

使用slim的时候,要明确一个思路,就是slim是为简化编码而生的,所以,当构建一个新的网络的时候,对每一个涉及tensorflow接口的代码块,要查找看是否有相应的slim接口,用slim如何实现。

例如,我们写多重卷积的时候,很可能会这样写:

net = ...
net = slim.conv2d(net, 256, [3, 3], scope='conv3_1')
net = slim.conv2d(net, 256, [3, 3], scope='conv3_2')
net = slim.conv2d(net, 256, [3, 3], scope='conv3_3')
net = slim.max_pool2d(net, [2, 2], scope='pool2')

然而,如果我们了解到slim提供了专门构建多重网络的接口,我们就可以这样改写代码:

net = slim.repeat(net, 3, slim.conv2d, 256, [3, 3], scope='conv3')
net = slim.max_pool2d(net, [2, 2], scope='pool2')

对于共享参数的情形,slim的arg_scope可以让工作变得简单:

  with slim.arg_scope([slim.conv2d], padding='SAME',
                      weights_initializer=tf.truncated_normal_initializer(stddev=0.01)
                      weights_regularizer=slim.l2_regularizer(0.0005)):
    net = slim.conv2d(inputs, 64, [11, 11], scope='conv1')
    net = slim.conv2d(net, 128, [11, 11], padding='VALID', scope='conv2')
    net = slim.conv2d(net, 256, [11, 11], scope='conv3')

这里,共享的初始化器和正则化器都只写了一遍。

以后将会补充一些用slim写的编程实例

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值