slim.conv2d以及slim.convolution2d与tf.nn.conv2d的不同

本文对比了TensorFlow中Slim库与tf.nn.conv2d在构建卷积层方面的区别。Slim通过减少样板代码提供了更简洁的模型定义方式,提高了代码的可读性和可维护性,同时也简化了超参数调整的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

  1. Slim是一个简化构建,训练和评估神经网络的库:
    允许用户通过消除样板代码来更紧凑地定义模型。 这是通过使用参数范围和许多高级层和变量来实现的。 这些工具提高了可读性和可维护性,降低了复制和粘贴超参数值的错误发生的可能性,并简化了超参数调整。
    通过提供常用的正则化器使开发模型变得简单。
    Slim可以轻松扩展复杂模型,并通过使用预先存在的模型检查点来热启动训练算法。

  2. 首先slim.conv2d与slim.convolution2d是一模一样的,可参考源码:
    https://github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/layers/python/layers/layers.py

# Simple alias.
conv1d = convolution1d
conv2d = convolution2d
conv3d = convolution3d
conv2d_transpose = convolution2d_transpose
conv3d_transpose = convolution3d_transpose
conv2d_in_plane = convolution2d_in_plane
separable_conv2d = separable_convolution2d

接下来我们讨论slim.conv2d以及tf.nn.conv2d的不同点。

对比

这两个函数都是用来构造卷积层的函数封装。
虽然TensorFlow操作集非常广泛,但神经网络的开发人员通常会根据更高级别的概念来考虑模型,例如“层”,“损失”,“度量”和“网络”。 诸如卷积层,完全连接层或BatchNorm层之类的层比单个TensorFlow操作更抽象,并且通常涉及多个操作。 此外,与更原始的操作不同,层通常(但不总是)具有与之关联的变量(可调参数)。 例如,神经网络中的卷积层由几个低级操作组成:

  • 创建权重和偏差变量
  • 使用前一层的输入来计算权重
  • 将偏差添加到卷积的结果中。
  • 激活函数。

使用tf.nn.conv2d创建一个完整的卷积层如下所示:

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.conv2d创建如下:

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

一句就可以了。

参考

1 :https://github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/layers/python/layers/layers.py
2 :tf.nn.conv2d和tf.contrib.slim.conv2d的区别


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值