1. 程式人生 > >為什麼CNN需要固定輸入影象的尺寸(CNN影象尺寸輸入限制問題)

為什麼CNN需要固定輸入影象的尺寸(CNN影象尺寸輸入限制問題)

通過CNN組成(卷積層和全連線層)進行分析。
(1)卷積層
  卷積層對於影象是沒有尺寸限制要求的。輸入影象是28*28,卷積僅於自身的卷積核大小,維度有關,輸入向量大小對其無影響(如第一層卷積,輸入影象的大小和維度)。

# 輸入影象
x = tf.placeholder(tf.float32, [None, 784])
y_ = tf.placeholder(tf.float32, [None, 10])
x_image = tf.reshape(x, [-1, 28, 28, 1])
# 卷積層
W_conv1 = weight_variable([5, 5, 1, 32])
b_conv1 = bias_variable([32
]) h_conv1 = tf.nn.relu(conv2d(x_image, W_conv1) + b_conv1) ... ... # 池化層 h_pool2 = max_pool_2x2(h_conv2)

(2)全連線層
  全連線過程中,w_fc1的輸入與卷積層後的輸出有關係,即對code中池化結果h_pool2進行reshape,該處是輸入上一層的大小7*7*64。

# 全連線層
W_fc1 = weight_variable([7*7*64, 1024])
b_fc1 = bias_variable([1024])
h_pool2_flat = tf.reshape(h_pool2,[-1
, 7*7*64]) # h_pool2_flat = tf.reshape(h_pool2,[batch_size, -1]) h_fc1 = tf.nn.relu(tf.matmul(h_pool2_flat, W_fc1) + b_fc1)

  可以看出,全連線層的輸入是固定大小的,如果輸入向量的維數不固定,那麼全連線的權值引數的量也是不固定的,就會造成網路的動態變化,無法實現引數訓練目的。