TensorFlow

텐서플로우(Tensorflow), placeholder (플레이스홀더)

LEEHANDS 2022. 3. 25. 14:41
반응형

텐서플로우에 플레이스 홀더라는 기능있다.

현재 텐서플로우 V2에서는 함수는 사라졌는데 그 개념은 아직 그대로일것같다.

 

앞서 설명한 것처럼 텐서플로우의 그래프(Graph) 를 미리 만들어 놓고,

필요한 시점에 해당 그래프를 실행하는 지연실행 (Lazy evaluation) 이라는 방식을 사용한다.

 

이런 내용에 걸맞게 플레이스홀더는 변수의 타입을 미리 설정해놓고 필요한 변수를 나중에 받아서 실행하는 것을 의미

텐서플로우는 신경망을 구현하기 때문에 신경망과 가장 어울리는 변수 설정이 바로 플레이스 홀더

 

신경망을 구현하기 위해서는 우선 Input node 와 Output node 를 설계합니다.

Input node 는 Feature들이고, Output node는 연산되어서 최종적으로 나오는 결과물일 것이다.

그리고 중간  Hidden Node를 생성하고 튜닝해서 Output node 를 최적화 한다.

 

즉 데이터 셋과 모델 셋을 분리하게 되어서 필요한 데이터셋을 모델에 대입하게 되면 신경망 구축하기 상당히 수월해진다.

import tensorflow as tf

a = tf.ones(shape=(3,2),dtype=tf.int32)
b = tf.ones(shape=(4,4),dtype=tf.float32)
c = tf.ones(shape=(2,2),dtype=tf.bool)

print(a)
print(b)
print(c)

텐서플로우 2 부터는 placeholder 함수가 없어지고 Variable 함수를 활용해야 한다.

이부분은 좀더 배워야하겠습니다.

 

이런식으로 구조가 완성되면 우리는 데이터셋에 대해서만 생각하면 되고

약간 구조를 복잡하게 해서 매우 간단한 신경망 구조를 만들어 보도록 합니다.

 

신경망은 일반적으로 Input , Hidden , Output 노드 들이 필요하며 중간중간 가중치 (Weight)와 고정적인 스칼라값인 Bias 를 통해

연산을 통해최종적으로 값이 나오는 구조

처음부터 다양한 노드를 만들고 가중치를 연산하는 것은 이해하기 어렵기 때문에

Input node와 Output node의 매우 간단한 구조만 설명하고 코딩으로 

 

위 그림은 Input 값 즉 특징이 4개의 값으로 이루어져있고, 어떠한 가중치와 연산을 통해서 2개의 값으로 결과가 출력되는 간단한 신경망 구조

이를 텐서플로우로 구현하면 아래와 같다.

 

시작하기전에 텐서플로우 2.x 에서 너무많이 바뀌었다.

텐서2.x 처럼 구현하겠다.

import tensorflow as tf

I = tf.Variable(tf.ones([2,4]), dtype=tf.float32, name = 'input')
W = tf.Variable(tf.ones([4,2]), dtype=tf.float32, name = 'weight')

I.assign([[1,2,3,4],[5,6,7,8]])
W.assign([[1.,2.],[3.,4.],[5.,6.],[7.,8.]])

node = tf.matmul(I,W)
tf.print(node)

반응형