본문 바로가기

딥러닝/컴퓨터 비전

[컴퓨터 비전] Tensorflow 기본 문법

반응형
my

logo

패키지 불러오기

 

SESSION

텐서플로는 기본적으로 설계도를 만드는 구조이다. 텐서플로의 가장 큰 장점중 하나는 computational graph를 그리는데 유용하다는 것이다. 그래프를 만들고 입력을 넣어 흐름에 따라 웨이트가 학습되는 것을 말한다.

이런 연산을 실행하는 키 같은 것이 세션이다.

 

CONSTANT

일반적으로 변하지 않는 특정 값을 상수라고 한다. 텐서플로에서 상수를 생성하기 위해서는 tf.constant()를 사용하면 된다.

출력

tf.constant를 통해 문자열을 상수로 정의했다. 하지만 타입과 값은 우리가 지정한 값이 나오지 않는다. 우리가 입력한 값을 얻기 위해서는 session.run()을 실행해야한다.

 

문자열이 아닌 bytes형으로 출력되는데 문자열로 변환하기 위해서는 decode 함수가 필요하다

 

문자열 이외에도 다양한 값을 상수로 지정할 수 있다.

이것도 위와 동일하게 값을 얻기 위해서는 run을 실행해야한다.

 

OPERATOR

우리가 만든 a라는 공간과 b라는 공간을 더하는 작업을 정의하는 것이다. 이 add를 호출하려면 역시 session.run()을 실행하면 된다. 실행하면 a와 b에 있는 값을 가져와서 정의했던 add를 수행해주고, 그 결과를 가져온다.

이처럼 상위 노드에서 값을 호출하면 알아서 하위 레이어의 값들을 가져와 값을 리턴해준다. 그래서 텐서플로를 코딩은 블록쌓는것처럼 밑단을 만들고 차곡차곡 선언하여 맨 위의 레이어를 콜하면 모든 결과를 가져올 수 있따. 이런걸 컴퓨테이셔널 그래프라고 한다.

add이외에도 multiply 등 여러 연산을 지정할 수 있다.

 

VARIABLE

VARIALBE은 변수를 의미하며 변하는 값을 지정해 주는 것이다. 텐서플로에서 VARABLE이란? 우리가 학습시키고 싶은 파라미터를 의미한다. NN의 weight나 CNN의 convolutional filter 같은 것이다. 일반적으로 0으로 초기화하는 것이 아닌 가우시안 분포에서 뽑게된다.

이제 weight를 세션에서 실행해본다.

이전과 동일하게 했지만 오류가 발생한다. VARIABLE은 항상 초기화를 시켜줘야 하기 때문이다. 이것을 수행시켜 주는 것이 tf.global_variables_initializer()이다.

초기화를 수행해 주면 정상적으로 실행된다. 실행할 때 마다 다른 값이 할당된다.

 

PLACEHOLDERS

PLACEHOLDERS는 입출력을 위한 통로이다. 학습을 위한 입력과 출력 데이터를 주는데 쓰인다.

placehoder의 두번째 파라미터로 들어가는 배열은 [data_수, data_demension]을 의미한다. NONE은 데이터 크기가 미정이라는 것이고 5는 데이터의 dimension을 의미한다.

OPERATOR를 통해 행렬의 연산을 정의한다.

shape=(?,2)로 출력되는데, ?는 PLACEHODER의 사이즈가 ?이기 때문에 ?로 나오고 2는 위에서 정의한 weight가 [5,2]인데 행렬 연산을 수행하게되면 2인 것을 알 수 있기 때문이다.

즉 이 과정은 ?x5형태의 행렬을 입력받아 weight인 5x2 행렬을 곱하여 ?x2의 행렬을 출력하는 것이다.

 

feed_dict으로 PLACEHOLDER라는 통로에 값을 집어 넣는 것이다. 여기서 data는 1x5의 행렬이기 때문에 출력 결과가 1x2 형태의 행렬이 나온다.

 

data를 10x5로 해주면 출력은 10x2행렬이 된다.

 

PLACEHOLDER를 통해 학습 데이터를 넣어주고, OPERATOR를 통해 여러 연산들을 정의하여 출력을 얻을 수 있게 된다. 이런 과정으로 텐서플로를 통해 학습을 진행할 수 있다.

반응형

'딥러닝 > 컴퓨터 비전' 카테고리의 다른 글

[컴퓨터 비전] MNIST 실습  (0) 2019.05.12
[컴퓨터 비전] 개발 환경 설정  (0) 2019.05.11
[컴퓨터 비전] 딥러닝  (0) 2019.05.11