2월, 2017의 게시물 표시

Tensorflow Chapter 6. 파일 불러오기

Chapter 6. 파일 불러오기 6강에서는 파일 불러오기를 완벽히 가르쳐주지 않고 다음 강의인 7강에 내용을 보충하여 설명해주셨다. 파일 뿐만 아니라 7강에서는 이미지 또한 불러오는 내용도 추가했다. 하지만 pandas 처럼 간단하지 않고 queue 에 넣고 queue_runner와 Coordinator를 실행해 하나씩 파일을 꺼내야 한다. 결론적으로 이미지를 불러오는 코드를 공부해봐야겠다. 강의에서 오류 없이 돌아가지만 내 컴퓨터에서 돌아가지 않는 코드는 일부 수정했다. 아래 코드는 강의를 8강까지 더 듣고 수정했다. csv 파일과 image파일을 읽어 오는 코드이다. import tensorflow as tf from PIL import Image IMAGE_PATH = '../data/Face00001.png' LABEL_PATH = '../data/Label.csv' IMAGE_LIST = [ IMAGE_PATH ] LABEL_LIST = [ LABEL_PATH ] IMAGE_WIDTH = 49 IMAGE_HEIGHT = 61 label_queue = tf.train.string_input_producer(LABEL_LIST) image_queue = tf.train.string_input_producer(IMAGE_LIST) reader_csv = tf.TextLineReader() reader_image = tf.WholeFileReader() label_key, label_value = reader_csv.read(label_queue) key, value = reader_image.read(image_queue) image_decoded = tf.image.decode_png(value) label_decoded = tf.decode_csv(label_value,record_defaults = [[ 0 ]]) x = tf.cast(image_decoded, tf.float32) ...

Tensorflow Chapter 7. CNN

Chapter 7-8. CNN 이번 강의에서는 cnn을 공부했다. dimension 때문에 한참 다시 봤던 것 같다. 아직도 완벽히 이해하지 못했다. cs231n 강의를 봐야 cnn에 대한 이해도가 좀 높아질것 같다. 텐서에 대한 차원만 이해해도 반은 이해할 것 같다. 왜 None으로 선언을 하는지 reshape에 -1은 무엇인지 이런 것들에 대한 해답을 찾는데 시간을 다 써버렸다. 이 두개를 통해 깨달은 것은 텐서플로우는 똑똑한 라이브러리라는 것이다. reshape에서 -1은 행렬에 맞게 나머지 차원을 알아서 잡아주고 placeholder에서 None도 나머지 행렬만 맞으면 알아서 넣어준다. import tensorflow as tf from PIL import Image IMAGE_PATH = '../data/Face00001.png' LABEL_PATH = '../data/Label.csv' IMAGE_LIST = [ IMAGE_PATH ] LABEL_LIST = [ LABEL_PATH ] IMAGE_WIDTH = 49 IMAGE_HEIGHT = 61 label_queue = tf.train.string_input_producer(LABEL_LIST) image_queue = tf.train.string_input_producer(IMAGE_LIST) reader_csv = tf.TextLineReader() reader_image = tf.WholeFileReader() label_key, label_value = reader_csv.read(label_queue) key, value = reader_image.read(image_queue) image_decoded = tf.image.decode_png(value) label_decoded = tf.decode_csv(label_value,record_defaults = [[ 0 ]]) x = tf.cast(image_decoded...

Tensorflow Chapter 5. 텐서보드 활용

이미지
Chapter 5. 텐서보드 활용 이번에는 텐서보드를 작성하는 강의를 보았다. 저번에도 해봤지만 참 멋있는기능이라고 생각한다. 구글은 참 대단한 기업이라는 생각이 절로 나게 하는 기능이다. 강의의 시작 부분은 파이썬의 with 문법으로 시작한다. 보통 파일 입출력에 많이 쓰이는 문법이다. close하기 귀찮을 때 자주 사용한다고 한다. 또한 텐서플로우에서도 Session을 파일로 생각해서 with 문법을 사용하는게 맞다고 한다. 예를 들면, 아래와 같이 Session을 열고 실행시킬 수 있다. with tf.Session as sess: _, loss, acc = sess.run([ train, cost, accuracy], feed_dict = feed_dict) 위와 같이 사용한다면 마지막에 굳이 Session을 닫지 않아도 된다. 즉, sess.close() 함수를 사용하지 않아도 된다. 그렇다면 이제 2가지만 기억하면 된다. * scope를 지정한다. * summary를 합치고 그래프를 그린다. scope를 지정하는 코드의 예를 들어보자. with tf.name_scope( 'hidden1' ) as h1_scope: hidden1 = tf.sigmoid(tf.matmul(x, w1) + b1, name= 'hidden1' ) with tf.name_scope( 'hidden2' ) as h2_scope: hidden2 = tf.sigmoid(tf.matmul(hidden1, w2) + b2, name= 'hidden2' ) with tf.name_scope( 'output' ) as o_scope: y = tf.sigmoid( tf.matmul( hidden2, wo ) + bo , name= 'y' ) with tf.name_scope( 'cost' ) as scope: cos...

Tensorflow Chapter 4. 모델 불러오기

이미지
Tensorflow Chapter 4. 모델 불러오기 이번 강의에서는 트레이닝한 모델을 불러들여 weight를 더 트레이닝하거나 새로운 데이터를 테스트할 수 있다. 강의에서 후반부로 갈수록 내가 이해하기엔 좀 힘들어서 모델 불러들이는 부분만 정리해야겠다. 이번엔 test.py와 train.py로 나뉘어서 train.py에서 모델을 트레이닝하고 weight를 model.ckpt에 저장하고 test.py에서 weight를 불러들여 바로 y에 넣는다. 이 두개를 비교하기 위해 restore.py를 만들었다. 트레이닝한 모델을 불러들여 accuracy를 측정하는 코드이다. 아래 코드는 test.py와 train.py를 diff 명령어를 통해 비교한 것이다. 3 , 4 c3, 4 # test 코드이기 때문에 데이터를 바꾸었다. < input_data = [[ 10 , 5 , 7 , 3 , 9 , 11 ], < [ 10 , 5 , 11 , 1 , 21 , 2 ]] --- > input_data = [[ 1 , 3 , 5 , 3 , 8 , 3 ], > [ 15 , 2 , 14 , 15 , 23 , 25 ]] 7 a8 > 34 a36, 41 # 모델을 트레이닝하는 코드들은 모두 지웠다. > cost = tf.reduce_mean(-y_ * tf.log(y) - ( 1 -y)*tf.log( 1 -y)) > train = tf.train.GradientDescentOptimizer(Learning_Rate).minimize(cost) > > comp_pred = tf.equal(tf.arg_max(y, 1 ) , tf.arg_max(y_, 1 )) > accuracy = tf.reduce_mean(tf.cast(comp_pred, dtype= tf.float32)) > 36 , 38 c43, 52 # 변수들을 init하는 함수들을 지우고 saver.resto...

Tensorflow Chapter 3. 평가 & 모델 저장

Tensorflow Chapter 3. 평가 & 모델 저장 1. Evaluation 모델을 평가하기 위해 cost를 측정해 비교할 수 있었다. 그 전에 reduce_sum이라는 함수를 굉장히 많이 쓰이므로 공부하고 넘어간다. RSS를 구하기 위해서도 reduce_sum 함수를 사용한다. 행렬의 원하는 원소의 합을 구할 수 있는 함수이다. 이 강의에서 깨달은 것은 batch에 관한 개념이었다. 이 예시에서는 데이터가 2개 밖에 없어 풀배치로 Train을 했기 때문에 cost_=tf.reduce_sum((-y_*tf.log(y)-(1-y)*tf.log(1-y)), 1) 연산을 해보면 원소는 2개가 나온다. 즉, batch의 갯수와 cost 행렬의 행의 개수는 같다. 역시 함수에 대한 이해는 텐서플로우 공식 다큐먼트를 보고 하는 것이 옳다. 함수 설명 tf.reduce_sum(input_tensor, axis=None, keep_dims = False, name = None, reduction_indices = None) 사용 예시 ‘x’ is [[1, 1, 1], [1, 1, 1]] tf.reduce_sum(x) ==> 6 tf.reduce_sum(x, 0) ==> [2, 2, 2] tf.reduce_sum(x, 1) ==> [3, 3] tf.reduce_sum(x, 1, keep_dims=True) ==> [[3], [3]] tf.reduce_sum(x, [0, 1]) ==> 6 그리고 기존 코드에서 아래와 같은 코드를 추가해 accuracy를 확인한다. comp_pred = tf.equal(tf.arg_max(y, 1 ), tf.arg_max(y_, 1 )) accuracy = tf.reduce_mean(tf.cast(comp_pred, dtype=tf.float32)) y행렬의 각 행에서 가장 큰 값을 가진 값의 인덱스와 y_행렬의 각행에거...

Tensorflow Chapter 2. 모델 설계하기

Tensorflow Chapter 2. 모델 설계하기 이번 강의에서는 간단한 모델을 만들어 실행해보는 예제 구현을 한다. 머신 러닝을 조금 공부해본 사람들이 이해하기 쉬운 강의였다고 생각한다. 편집본을 봐서 그런지 weight, bias 에 대한 지식은 안다고 가정하고 강의하시는 것 같다. weight나 bias 같은 개념을 조금이나마 알기 때문에 weight과 bias 값에는 tf.Variable을 통해 값을 저장한다는 것을 이해할 수 있었다. 만약 모르는 사람이라면 constant나 placeholder로 선언하지 왜 굳이 variable인가 라고 의문을 던질 수 있다고 생각한다. 우선 강의에서 사용한 예제를 살펴보자면 아래와 같다. import tensorflow as tf import numpy as np input_data = [[ 1 , 5 , 3 , 7 , 8 , 10 , 12 ], [ 5 , 8 , 10 , 3 , 9 , 7 , 1 ]] label_data = [[ 0 , 0 , 0 , 1 , 0 ], [ 1 , 0 , 0 , 0 , 0 ]] # 좋은 코드의 예 INPUT_SIZE = 7 HIDDEN1_SIZE = 10 HIDDEN2_SIZE = 8 CLASSES = 5 Learning_Rate = 0.01 # 행렬인 데이터들을 텐서로 만들어주기 위해 placeholder를 이용해 선언 x = tf.placeholder( tf.float32, shape = [ None , INPUT_SIZE]) y_ = tf.placeholder( tf.float32, shape = [ None ,CLASSES] )언 feed_dict = {x: input_data, y_: label_data} # hidden layer의 weight와 bias 선언 W_h1 = tf.Variable( tf.truncated_normal(shape=[INPUT...

Tensorflow Chapter 1.텐서플로우 자료형

Tensorflow Chapter 1. 텐서플로우 자료형 Youtube에서 chanwoo lee님께서 올린 동영상 을 정리하고자 쓴 글이다. 그냥 딥러닝 공부하다가 쓰이는 라이브러리라고 생각하고 공부했다고 좌절한 기억이 있다. 그래서 텐서플로우부터 공부하고자 한다. 이찬우님께서 올리신 동영상을 봤는데 굉장히 설명이 자세하고 텐서플로우 라이브러리에 대한 이해를 높일 수 있는 기회가 될 수 있겠다고 생각했다. 첫 수업은 크게 2가지로 나뉜다. * 텐서플로우의 기본 작동 원리 * 자료형에 대한 이해 1. 텐서플로우의 기본 작동 원리 텐서플로우의 작동 원리를 크게 보자면 session이라는 큰 틀에 그래프를 넣고 session을 device(ex.gpu,cpu)에서 실행시키는 것이다. 간단히 예를 들어보자면, import tensorflow as tf ph = tf.placeholder(dtype=tf.float32) const = tf.constant([ 3 ]) const1 = tf.constant([ 4 ]) var = tf.Variable([ 2 ]) result_const = const + const1 sess = tf.Session() //session을 열고 res = sess.run(result_const) //result_const안에 있는 그래프를 session에 넣고 session을 device에서 연산하고 값을 반환 print(res) 2. 텐서플로우 자료형에 대한 이해 2.1 constatnt constatnt 위 예제와 같이 선언되며 초기화됨과 동시에 노드 안에 값을 갖게 된다. 그래서 따로 초기화를 안해주어도 되며 result_const값을 run안에 넣어주면 연산하게 된다. 2.2 variable variable은 constant와는 조금 다르다. constant은 초기화 되고 바로 노드에 값이 저장되지만 variable은 빈 노드를 그래프에 그려넣어 놓고 tf....