tf.nn.conv2dの異なるslim.conv2dとslim.convolution2d



Different Slim Conv2d



序文

  1. 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のさまざまなポイントについて説明します。

比較

これらの2つの関数は、畳み込み関数パッケージ構造層に使用されます。
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つ。

参照

1: https://github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/layers/python/layers/layers.py
二 : 違いtf.nn.conv2dとtf.contrib.slim.conv2d