TensorFlow의 기본

업데이트:

본 글은 모두를 위한 머신러닝/딥러닝 강의를 참고하여 작성하였습니다.
소스 코드는 DeepLearningZeroToAll를 참고 하여 작성하였습니다.

TensorFlow의 기본적인 operations

우리는 여러 딥러닝을 사용하면서 많이 접하는 라이브러리가 있습니다.
바로 TensorFlow입니다.
TensorFlow는 다른 딥러닝 도구들에 비해 많은 라이브러리를 담고 있으며,
관련 자료도 풍부하여 공부하기도 적용하기도 쉽습니다.

TensorFlow

그럼 여기서 TensorFlow란 무엇일까요?
TensorFlow는 Data Flow Graph를 이용해서 수치 연산을 하는 것 입니다.

Data Flow Graph 란?
노드와 간선으로 이루어져 있으며,
데이터가 어떻게 적용 돼 있는지를 시각화 한 그래프

여기서 Tensor는 차원을 나타내는 개념으로 데이터로 생각하면 쉽습니다.
이 데이터가 어떻게 연산을 거쳐 작동하는지를 나타낸 것이 TensorFlow 입니다.

TensorFlow Basics

TensorFlow Version 확인

import tensorflow as tf
tf.__version__
'2.2.0-rc4'

Hello TensorFlow!

hello = tf.constant("Hello, TensorFlow")
sess = tf.Session()
print(sess.run(hello))

위 코드는 TF1.0에서 작성 된 문서로 TF2.0 에서는 오류가 발생합니다.

코드를 아래와 같이 작성합니다.

import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()

hello = tf.constant("Hello, TensorFlow")
sess = tf.Session()
print(sess.run(hello))
b'Hello, TensorFlow'

Tensors

3 # rank가 0인 tensor, 스칼라값
[1., 2., 3.] # rank가 1인 tensor, 길이가 3인 벡터
[[1., 2., 3.], [4., 5., 6.]] # rank가 2인 tensor, 2행 3열인 행렬
[[[1., 2., 3.]], [[7., 8., 9.]]] # rank가 3인 tensor
[[[1.0, 2.0, 3.0]], [[7.0, 8.0, 9.0]]]

Computational Graph

그래프를 생성하는 단계

node1 = tf.constant(3.0, tf.float32)
node2 = tf.constant(4.0)
node3 = tf.add(node1, node2) # node3 = node1 + node2
print("node1:", node1, "node2:", node2)
print("node3: ", node3)
node1: Tensor("Const_2:0", shape=(), dtype=float32) node2: Tensor("Const_3:0", shape=(), dtype=float32)
node3:  Tensor("Add:0", shape=(), dtype=float32)

위 결과는 각 node가 어떤 텐서값을 갖고 있는지를 나타내 주므로,
결과 값을 출력하고 싶을 경우 Session을 이용하여 나타내줘야 한다.

결과 값 출력 단계

sess = tf.Session()
print("sess.run(node1, node2): ", sess.run([node1, node2]))
print("sess.run(node3): ", sess.run(node3))
sess.run(node1, node2):  [3.0, 4.0]
sess.run(node3):  7.0

Placeholder

그래프를 생성하는 단계
constant는 값이 고정 돼 있지만,
Placeholder는 값이 고정 돼 있지 않다.

a = tf.placeholder(tf.float32)
b = tf.placeholder(tf.float32)
adder_node = a + b  # adder_node = tf.add(a, b)

print(sess.run(adder_node, feed_dict = {a: 3, b: 4.5}))
print(sess.run(adder_node, feed_dict = {a: [1,3], b: [2, 4]}))
7.5
[3. 7.]
add_and_triple = adder_node * 3.
print(sess.run(add_and_triple, feed_dict = {a: 3, b:4.5}))
22.5

댓글남기기