티스토리 뷰
텐서플로를 사용하려면 당연지사 텐서플로를 공부 해야 겠죠? 저도 공부하는 입장이기 때문에, 많은걸 알지 못하지만, 필수적이고 자주사용되는 API들을 알아보려 합니다. (텐서플로 1.x버전 기준)
1.tf.Session()
그래프를 만들고 실행하기 위해서는 세션을 만들고, 실행시켜 줘야 합니다.
#텐서플로에서 그래프의 실행은 세션을 열어서 수행한다. 텐서플로에서 세션을 열면 그래프 상에서 텐서를 주고받게 되고, 이에 대한 정보를 저장하고있다가, 세션을 종료하면 저장하고 있던 정보들을 삭제한다.
2. tf.constant (상수 텐서)
상수값을 표현하는 tf.constant
tf.constant(value, dtype = None, shape = None, name = 'Const')
인자
-
value - 상수값
-
dtype - 데이터 타입 (tf.float32, tf.int32, tf.bool 등등..)
-
shape - 상수 데이터의 형태
-
name - 텐서의 이름
ex) tensor1 = tf.constant([1,2,3,4,5,6,7]), tensor2 = tf.constant(-1.0, shape=[2,3])
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
node1 = tf.constant(5.0, dtype=tf.float32)
node2 = tf.constant(2.0) # dtype은 생략 가능, 생략할경우 tf.float32 타입
print(node1, node2) #노드의 정보 출력, 5,2 값이 출력되지 않음, 그래프를 실행시켜야 값이 출력
# 텐서플로에서 상수의 선언은 그래프의 노드형태를 정의하는 것이다.
# 텐서플로에서 그래프의 실행은 세션을 열어서 수행한다. 텐서플로에서 세션을 열면 그래프 상에서 텐서를 주고받게 되고, 이에 대한 정보를 저장하고
# 있다가, 세션을 종료하면 저장하고 있던 정보들을 삭제한다.
sess = tf.Session()
print(sess.run([node1,node2]))
node3 = tf.add(node1,node2)
print("node3", node3)
print("sess.run(node3): ", sess.run(node3))
sess.close()
3. tf.Variable
옵티마이저에 의해 업데이트 되는 가변값을 받을 수 있는 파라미터
tf.Variable(initial_value = None, trainable = True, name = None)
인자
- initial_value - 변수의 초기 값, 변수의 shape을 포함한 상태로 지정되어야 함
- trainable - 트레이닝 가능 여부를 나타내는 bool 값, 기본값은 True, 만약 False면 옵티마이저에 의해 파라미터가 업데이트 되지 않음
- name - 이름
ex) W = tf.Variable(tf.random_normal([1])), b = tf.Variable(tf.random_normal([1]))
<초기화로 사용할 수 있는 연산자들>
- tf.random_normal - 가우시안 분포(정규분포)에서 임의의 값 추출
- tf.truncated_normal - 끝 부분이 잘린 정규분포모양에서 임의의 값 추출
- tf.random_uniform - 균등분포에서 임의의 값 추출
- tf.constant - 특정한 상수값으로 지정한 행렬을 채움
- tf.zeros - 모두 0인 행렬
- tf.ones - 모두 1인 행렬
tf.Variable은 다음에 설명드릴 선형회귀에서 사용됩니다. 선형회귀 포스팅에서 코드를 확인하세요 :)
4. Placeholder(플레이스홀더)
임의의 값을 입력받아서 임의의 값을 출력할 수 있는 플레이스홀더
플레이스 홀더 노드는 그래프에서 임의의 입력값을 받을수 있습니다. 자주 사용되니 꼭 알아두세요!
tf.placeholder(dtype, shape = None, name = None)
인자
-
dtype - 넣어 줄 데이터의 타입 (tf.float32, tf.int32, tf.bool 등등..)
-
shape - 넣어 줄 데이터의 형태, None은 임의의 차원을 받을 수 있는 특수 키워드
-
name - 이름
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
# 플레이스홀더 - 임의의 값을 입력받아 임의의값을 출력하기 위해 사용, 플레이스홀더 노드는 그래프에서 임의의 입력값을 받을 수 있다.
# tf.placeholder는 feed_dict를 통해 임의의 값을 입력 받는다.
# tf.placeholder - 플레이스 홀더 선언, TensorFlow api 책 참고
a = tf.placeholder(tf.float32) # dtype - float32,int32,bool 등.. , shape - 데이터의 형태, None 타입 - 임의의차원
b = tf.placeholder(tf.float32)
adder_node = tf.add(a,b) # a+b 로도 가능
sess = tf.Session()
#feed_dict를 선언하고, feed_dict부분에 플레이스홀더 노드에 넣을 값을 지정 (딕셔너리 타입)
print(sess.run(adder_node, feed_dict={a: 5, b: 6.5}))
print(sess.run(adder_node, feed_dict={a: [5, 2], b: [6.5, 3.5]}))
add_and_mul = tf.multiply(adder_node,3) # adder_node * 5 로도 선언 가능
print(sess.run(add_and_mul, feed_dict={a: 5, b: 6.5}))
sess.close()
'머신러닝' 카테고리의 다른 글
Multi-variable linear regression(다중선형회귀) (0) | 2020.02.07 |
---|---|
Linear Regression(선형 회귀) & Gradient Descent(경사하강법) TensorFlow 1.x, 2.x 반영 (0) | 2020.02.06 |
머신러닝 입문자, 초보자를 위한 내용 정리 (+Tensorflow) (0) | 2020.02.05 |
TensorFlow 2.0 에서 TensorFlow 1.0 , 1.x 버전 코드 실행하기 (0) | 2020.02.05 |
머신러닝 기초 (간단한 용어 및 개념 정리) (0) | 2020.02.04 |