2016-11-01 11 views
2

テンソルフロー内の畳み込みニュートラルネットワークがこの数値をどのように計算するかわかりません。tutorialh_conv1 = tf.nn.relu(conv2d(x_image, W_conv1) + b_conv1)Tensorflow畳み込みネットワーク - 次元(形状)の計算方法

  • 第一層の形状:28個の* 28個のピクセル(x_image = tf.reshape(x, [-1,28,28,1])
  • パッチサイズが5×5である(W_conv1 = weight_variable([5, 5, 1, 32]
  • は、第一の畳み込み層によって行われる

    1. 画像が有しますです:h_pool1.get_shape()TensorShape([Dimension(10), Dimension(14), Dimension(14), Dimension(32)])

    Q1:最初の次元が10であるのはなぜ?

    Q2:なぜ5x5のパッチサイズでサイズが14x14に縮小されるのですか?私が28x28イメージを持っていて、5x5パッチをすべてのピクセルに適用すると、14x14以上のピクセルが期待されます。

    質問3:回答-1x_imageのコードで何をしていますか?

  • 答えて

    4

    形状は(batch_size、height、width、channel)です。

    Q1。 10はバッチサイズです。 10(

    x = tf.placeholder(tf.float32, shape=[None, 784]) 
    

    、あなたは「ディメンション(なし)」をバッチサイズを持つことになります代わりに寸法」のこの方法:チュートリアルでラインですが

    x = tf.placeholder(tf.float32, shape=[10, 784]) 
    

    :私はあなたがこのようなラインを持っていると思います)」。

    Q2。 レイヤ1には、畳み込みレイヤと最大プールレイヤが含まれています。 "SAME" paddingの畳み込みレイヤーは、同じサイズのものを出力します。サイズの縮小は、(S/2、w/2)を出力する "SAME"パディング付きの2x2 max-poolingから発生します。

    def conv2d(x, W): 
        return tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='SAME') 
    
    def max_pool_2x2(x): 
        return tf.nn.max_pool(x, ksize=[1, 2, 2, 1], 
             strides=[1, 2, 2, 1], padding='SAME') 
    
    h_conv1 = tf.nn.relu(conv2d(x_image, W_conv1) + b_conv1) 
    h_pool1 = max_pool_2x2(h_conv1) 
    

    Q3。 tf.reshape() with a single dimension "-1"は、プログラムによって自動的に計算された寸法を残して、合計サイズが同じになるようにします。

    関連する問題