Page 963 - 3-3
P. 963
kernel1=tf.Variable(tf.truncated_normal(shape=[4,4,1,4],stddev=0.1))
#4*4*1 의 필터를 4 장 사용하기 위해서 정규분포로 초기화 정규분포의 난수( )
bias1=tf.Variable(tf.truncated_normal(shape=[4],stddev=0.1))
# 이미지와 kernel1 을 conv 한 후 사이즈 만큼 더해주기위한 변수
conv1=tf.nn.conv2d(x,kernel1,strides=[1,1,1,1],padding='SAME')+bias1
# 이미지 x 에 kernel1 을 컨볼루션곱을 한다
#2 칸을 이동하려면 [1,2,2,1] 로 한다
#padding 옵션에 따라서 출력 사이즈가 바뀜
activation=tf.nn.relu(conv1)
# 컨볼루션을 한 conv1 변수에 ReLU 활성함수를 적용
pool1=tf.nn.max_pool(activation,ksize=[1,2,2,1],strides=[1,2,2,1],padding='SAME')
#tf.nn.pool 을 이용해서 14*14*4 사이즈로 바뀜
kernel2=tf.Variable(tf.truncated_normal(shape=[4,4,4,8],stddev=0.1))
#4*4*4 의 필터를 8 장 사용하기 위해서 정규분포로 초기화
bias2=tf.Variable(tf.truncated_normal(shape=[8],stddev=0.1))
#14*14*4 크기로 바뀐 이미지와 kernel2 를 conv 한 후 사이즈 만큼 더해주기위한 변수
conv2=tf.nn.conv2d(pool1,kernel2,strides=[1,1,1,1],padding='SAME')
#14*14*4 사이즈로 바뀐 이미지에 kerenl1 을 컨볼루션곱을 한다
activation2=tf.nn.relu(conv2)
# 컨볼루션을 한 conv2 변수에 ReLU 활성함수를 적용
pool2=tf.nn.max_pool(activation2,ksize=[1,2,2,1],strides=[1,2,2,1],padding='SAME')
#tf.nn.pool 을 이용해서 7*7*8 사이즈로 바뀜
w1=tf.Variable(tf.truncated_normal(shape=[8*7*7,plateCount]))
#8*7*7 * plateCount 크기의 변수 생성
b1=tf.Variable(tf.truncated_normal(shape=[plateCount]))
# 출력 사이즈만큼 크기를 잡음
pool2_flat=tf.reshape(pool2,[-1,8*7*7])
#CNN Layer 를 2 번에 걸쳐 7*7*8 사이즈의 크기를 1 차로 펼친다
outPutLayer=tf.matmul(pool2_flat,w1)+b1
#pool2_flat 와 w1 를 내적하고 b1 을 더한다
loss=tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits
(labels=y_label,logits=outPutLayer))
# 로그와 레이블간의 softmax 교차 엔트로피를 계산한 값의 평균값을 낸다
train_step=tf.train.AdamOptimizer(0.005).minimize(loss)
#0.005 의 step 으로 최소값을 구함
init=tf.global_variables_initializer()
# 초기화 하는 함수 저장
sess=tf.Session()
#Session 을 sess 에 저장
- 963 -