컴퓨터/ML
[Tensorflow #1] 기본 개념
OrehOnyah
2019. 12. 26. 15:27
이 내용은 Sung kim님의 강의를 바탕으로 만들어졌습니다.
Tensorflow에서는 일반적인 python 프로그래밍과 다르게 Tensorflow에서 지정한 자료형과 계산 방식이 있다.
import tensorflow as tf
tf.constant("Hello, Tensorflow!") # 상수
sess = tf.Session()
print(sess.run(hello))
b'Hello, Tensorflow!
그래프
- 노드 : `n1 = tf.constant(3.0, tf.float32)
- 노드 : `n2 = tf.constant(4.0)
- 그래프 : `n3 = tf.add(n1, n2)
- 실행 : `sess = tf.Session(); sess.run(node3)
constant는 그래프에서 하나의 노드로 취급되고(print(tf.constant(3.0))
실행 시 숫자가 출력되지 않음.
tf.add()도 하나의 노드로 취급됨
sess.run해야 비로소 값 취급됨
노드 종류
tf.constant
: 변하지 않는 값tf.placeholder
: 자료형만 정하고, 값은 sess.run할 때 정해준다.비교
constant 버전
a = tf.constant(3.0, tf.float32) b = tf.constant(4.0, tf.float32) c = a+b print(tf.Session().run(c))
placeholder 버전
a = tf.placeholder(tf.float32) b = tf.placeholder(tf.float32) c = a+b print(tf.Session().run(c, feed_dict={a:3, b:4}))
같은 결과를 나타내지만, constant는 새로운 constant 노드를 생성 후 그래프를 새로 그려야 하기 때문에 더 느리다.
placeholder는 만들어진 모델에 값만 바꾸어 넣으므로, 더 빠른 속도를 보인다.
또한, placeholder는 다음과 같이 여러 개의 값에 대해 이용할 수 있다.
sess.run(c, feed_dict={a:[1,3], b:[2,4]})
이 경우에 출력으로 [3. 7.]
을 얻을 수 있다.
scalar, vector, matrix, tensor
Tensor은 숫자의 배열이 3차원 이상인 것을 지칭한다.
간단히 말하면 상수가 스칼라, 1차원 배열이 벡터, 2차원 배열이 매트릭스, 3차원 배열이 텐서이다.
Rank, Shape
Rank는 몇 차원인가를 나타낸다.
shape는 배열이 어떤 모습을 나타내고 있는지를 말한다.
ex) [[0,0,0],[0,0,0]]
-> [2,3]
밖에서부터 세면 됨