LoginSignup
13
13

More than 5 years have passed since last update.

TensorFlowでゼロから作るDeep Learning [Multilayer Convolutional Network]

Last updated at Posted at 2016-08-13

TensorFlowのチュートリアルのDeep MNIST for Expertsがあると思いますが、その中のBuild a Multilayer Convolutional Networkのとこで図で説明されないとイメージが湧かなかったので、作ってみました。

スクリーンショット 2016-08-13 17.32.43.png

【注意】 入力画像の部分にはわかりやすくパディングした結果を書いていますが、下のconv2dmax_pool_2x2を見てもらえば分かりますが他の画像も同様にパディングしています。

Weight Initialization

def weight_variable(shape):
  initial = tf.truncated_normal(shape, stddev=0.1)
  return tf.Variable(initial)

def bias_variable(shape):
  initial = tf.constant(0.1, shape=shape)
  return tf.Variable(initial)

Convolution and 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')

First Convolutional Layer

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_pool1 = max_pool_2x2(h_conv1)

Second Convolutional Layer

上記の図でうまく書けなかったのですが、h_conv2の重みの初期化時にshapeが5 x 5 x 32 x 64となっているので、調べたところ、以下のような説明がされていました。

参照サイト: TensorFlow Tutorialの数学的背景 − Deep MNIST for Experts(その3)によると、

2段目のフィルターでは、64枚ある「1つのフィルター」は内部的に32個のサブフィルターを持っており、「1段目から出てきた32枚のそれぞれを対応するサブフィルターにかけた結果を重ねあわせる」という処理をします。

W_conv2 = weight_variable([5, 5, 32, 64])
b_conv2 = bias_variable([64])

h_conv2 = tf.nn.relu(conv2d(h_pool1, W_conv2) + b_conv2)
h_pool2 = max_pool_2x2(h_conv2)

Densely Connected Layer

  • tf.reshape(h_pool2, [-1, 7*7*64])でflatなベクトルに変換しています。
    • TensofFlowのreshapeについては公式ページをみてください
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_fc1 = tf.nn.relu(tf.matmul(h_pool2_flat, W_fc1) + b_fc1)

Readout Layer

W_fc2 = weight_variable([1024, 10])
b_fc2 = bias_variable([10])

y_conv=tf.nn.softmax(tf.matmul(h_fc1_drop, W_fc2) + b_fc2)
13
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
13