텐서플로우(Tensorflow) 기본 문법
placeholder
선언과 동시에 초기화 하는것이 아니라
일단 선언후 그다음값을 전달한다. 따라서 반드시 실행시 데이터가 제공되어야한다.
정확히 다른 텐서를 placeholder에 맵핑 시키는것
전달 파라미터
placeholder(
dtype,
shape=None,
name=None
)
dtype :데이터 타입을 의미하며 반드시 적어줘야함
shape : 입력 데이터의 형태를 의미한다. 상수값이 될수도있고 다차원 배열의 정보가 들어올수도있다.(
안적어도됨 defalut로 none)
name : 말그대로 placeholder에 이름을 부여하는것 (안적어도됨 defalut로 none)
ex)
mat_img = [1,2,3,4,5]
label = [10,20,30,40,50]
ph_img = tf.placeholder(dtype=tf.float32)
ph_lb = tf.placeholder(dtype=tf.float32)
ret_tensor = ph_img + ph_lb
result = sess.run(ret_tensor, feed_dict={ph_img:mat_img, ph_lb:label})
print(result)
== [11. 22. 33. 44. 55.]
Variable
variable은 텐서가 아니라 하나의 객체가 되는것.
variable 클래스의 인스턴스가 생성되는것이고 해당 인스턴스를 그래프에 추가시켜주어야한다.
ex)
var1 = tf.Variable([5])
var2 = tf.Variable([10])
var3 = tf.Variable([3])
var4 = var1 * var2 + var3
// global_variables_initializer() 사용해야한다.
이자체가 연산이된다. global_variables_initializer()를 호출하기 전에 그래프의 상태는 각 노드에 값이 아직없는 상태를 의미한다.
따라서 해당 함수를 사용해주어야 variable의 값이 할당되는것이고 텐서의 그래프로써의 효력이 발생하는것이다.
(옛 버전은 , // initialize_all_variables()이다 )
init = tf.global_variables_initializer()
sess.run(init)
print(var4)
result = sess.run(var4)
print(result)
Constant
기본적으로 텐서플로우에 값을 할당하기 위해서는 constant라는 키워드를 사용
아래와 같이 변수 a에 1차원 배열형태 1,2,3, 할당
변수 b에 2차원 배열형태로 값을전달 .
import tensorflow as tf
a = tf.constant([1,2,3])
b = tf.constant([[10,20,30], [100,200,300]])
c = tf.add(a,b)
print(c)
[[ 11 22 33] [101 202 303]] 이 아닌 다른결과물이 출력.
텐서플로우 프로그래밍 모델을 이해할것.
Tensor 라는 동적사이즈의 다차원 데이터 배열 그리고 Flow라는 이 Tensor들의 흐름을 제어하는 의미인것으로 데이터플로우 그래프 기반의 라이브러리 .
결과적으로 모든것은 Tensor라는 것으로 이루어져있고 이를통해 연산을하고 결과를 출력.
따라서 기본적으로 텐서를 선언하고 프린트하였으니 당연히 텐서의 정보를 출력한것.
위의 텐서는 (2,3) 형태의 배열에 자료형이 정수형임을 의미한다.
텐서플로우 구조
기본적으로 텐서플로우는 텐서의 정보만반환 즉 파이선레벨에서는 절대 연산을 수행하지않는다.
텐서플로우를 연산하는법
=> Session 과 Grapch를 이용하는것
텐서의 연산끼리는 그래프 라는것을 그린다.
방향성그래프를 생성하는데 이것이 곧 하나의 세션을 의미한다.
그리고 이렇게 생성된 하나의 세션은 연산장치(cpu,gpu)로 올라가서 연산을 수행.
즉, 위의 그래프를 세션의 형태로 담아서 연산장치에 심어준다.
.......
Client 단 에서는 데이터의 흐름을 그래프로 정의하여 세션을 만드는 것
Distributed Master 는 Session.run() 을 통하여 그래프의 부분부분을 나누어 분산 처리하여 각 Worker Services 에 보낸다.
Worker Services는 Distributed Master 단에서 받은 각 그래프의 부분조각의 작업을 커널(Kernel) 단에서 처리하기 위해 스케쥴링을 실시한다.
Kernel Implementations 에서는 Worker Services 에서 스케쥴된 작업 즉, 연산을 수행한다.
'인공지능' 카테고리의 다른 글
데이터 전처리와 Augmentation(증가) // 인공지능 논문리뷰 (0) | 2020.02.20 |
---|---|
epochs/batch size (0) | 2020.02.13 |
Tensor란? (0) | 2020.01.15 |
CNN / Faster R-CNN (0) | 2020.01.13 |
TFRecord (0) | 2020.01.09 |