Page 966 - 3-3
P. 966
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 에 저장
sess.run(init)
# 초기화
saver=tf.train.Saver()
# 모델을 저장하는 함수 호출
while True:
# 무한 반복
ret,frame=cap.read()
- 966 -