주요 컨텐츠로 이동

Databricks의 TensorFlow™

Illustration

변수

TensorFlow는 요청될 때까지 실제로 계산을 수행하지 않고 계산을 표현하는 방법입니다. 이러한 의미에서 TensorFlow는 지연 컴퓨팅의 한 형태이며 코드 실행을 크게 향상시킬 수 있습니다.
  • 복잡한 변수 계산을 더 빠르게
  • GPU를 포함하여 여러 시스템에 계산을 분산
  • 일부 계산에서 중복성 감소

실제 작동 과정을 살펴보겠습니다. 먼저, 매우 기본적인 Python 스크립트입니다.

 

x = 35
y = x + 5
print(y)

 

이 스크립트에서는 기본적으로 '값이 35인 변수 x를 만들고, 새 변수 y의 값을 35에 5를 더한 값(현재 40)으로 설정한 다음 출력'합니다. 이 프로그램을 실행하면 값 40이 출력됩니다. Python 사용이 익숙하지 않으면 basic_script.py라는 새 텍스트 파일을 만들고 해당 코드를 복사합니다. 컴퓨터에 저장하고 다음 명령어를 사용해 실행합니다.

python basic_script.py

참고로, 경로(즉, basic_script.py)는 파일을 참조해야 하므로 파일이 Code 폴더에 있는 경우 다음을 사용합니다.

python Code/basic_script.py

또한 Anaconda 가상 환경을 활성화했는지 확인합니다. Linux에서는 프롬프트가 다음과 같이 표시됩니다.

(tensorenv)username@computername:~$

작동한다면 이에 상응하는 TensorFlow로 변환해 보겠습니다.

 

import tensorflow as tf

x = tf.constant(35, name='x')
y = tf.Variable(x + 5, name='y')

print(y)

 

이 TensorFlow를 실행하면 <tensorflow.python.ops.variables.Variable object at 0x7f074bfd9ef0>과 같이 재미있는 결과가 출력됩니다. 이 결과는 분명히 40이 아닙니다 .

그 이유는 프로그램이 실제로 이전 프로그램과 상당히 다른 작업을 수행하기 때문입니다. 이 코드는 다음을 수행합니다.

  1. TensorFlow 모듈을 가져와 tf라고 지정합니다.
  2. x라는 상수 값을 만들고 숫자 값 35를 지정합니다.
  3. y라는 변수를 만들고 값을 'x + 5'라는 방정식으로 정의합니다.
  4. y에 대한 방정식 객체를 출력합니다.

미묘한 차이점은 이전 프로그램에서처럼 y에 'x의 현재 값 + 5'가 제공되지 않는다는 것입니다. 대신에, 이는 사실상 '이 변수를 연산할 때 x 값을 (그대로) 사용하고 여기에 5를 더한다'는 의미의 방정식입니다. y 값의 계산은 위의 프로그램에서 실제로 수행되지 않습니다.

이 문제를 해결해 보겠습니다.

 

import tensorflow as tf

x = tf.constant(35, name='x')
y = tf.Variable(x + 5, name='y')

model = tf.global_variables_initializer()

with tf.Session() as session:
    session.run(model)
    print(session.run(y))

 

print(y)문을 제거하고, 대신 세션을 생성하는 코드를 사용해 실제로 y 값을 계산했습니다. 이는 꽤 많은 상용구 코드이지만 다음과 같이 작동합니다.

  1. TensorFlow 모듈을 가져와 tf라고 지정합니다.
  2. x라는 상수 값을 만들고 숫자 값 35를 지정합니다.
  3. y라는 변수를 만들고 값을 'x + 5'라는 방정식으로 정의합니다.
  4. 변수를 tf.global_variables_initializer()로 초기화합니다(이 부분에 대해서는 조금 더 자세히 살펴보겠습니다.).
  5. 값을 계산하기 위한 세션을 만듭니다.
  6. 4단계에서 만든 모델을 실행합니다.
  7. 변수 y만 실행하고 현재 값을 출력합니다.

위의 4단계에서는 놀라운 일이 일어납니다. 이 단계에서는 변수 간의 종속성에 대한 그래프가 생성됩니다. 이 경우 변수 y는 변수 x에 따라 달라지고, 해당 값은 5를 더하여 변환됩니다. 이 값은 7단계까지 계산되지 않으며, 그때까지는 방정식과 관계만 계산됩니다.

1) 상수는 배열이 될 수도 있습니다. 이 코드가 수행하는 작업을 예측한 후 실행하여 확인합니다.

 

import tensorflow as tf


x = tf.constant([35, 40, 45], name='x')
y = tf.Variable(x + 5, name='y')


model = tf.global_variables_initializer()

with tf.Session() as session:
    session.run(model)
    print(session.run(y))

 

2) 10,000개의 난수로 구성된 NumPy 배열( x라고 함)을 생성하고 방정식을 저장하는 변수를 만듭니다.

y = 5x2 − 3x+15

다음 코드를 사용하여 NumPy 배열을 생성할 수 있습니다.

 

import numpy as np
data = np.random.randint(1000, size=10000)

 

그런 다음 위의 질문 1의 목록 대신 이 data 변수를 사용할 수 있습니다. 일반적으로 NumPy는 목록보다 훨씬 더 메모리 효율적이고 빠르게 계산할 수 있기 때문에 더 큰 숫자 목록/배열에 사용해야 합니다. 또한 대개 목록에서 사용할 수 없는 상당수의 함수(예: 평균 계산)를 제공합니다.

3) 나중에 머신 러닝에 사용할 루프의 변수를 업데이트할 수도 있습니다. 이 코드를 살펴보고 이 코드가 수행하는 작업을 예측한 후 실행하여 확인합니다.

 

import tensorflow as tf


x = tf.Variable(0, name='x')

model = tf.global_variables_initializer()

with tf.Session() as session:
    session.run(model)
    for i in range(5):
        x = x + 1
        print(session.run(x))
        

 

4) 위의 (2)와 (3)의 코드를 사용하여 np.random.randint(1000) 코드 줄의 '연속' 평균을 계산하는 프로그램을 만듭니다. 즉, 루프를 계속 반복하고, 각 루프에서 np.random.randint(1000)를 한 번 호출하고, 각 루프를 계속 업데이트하는 변수에 현재 평균을 저장합니다.

5) TensorBoard를 사용하여 이러한 예시 중 일부에 대한 그래프를 시각화합니다. TensorBoard를 실행하려면 tensorboard --logdir=path/to/log-directory 명령어를 사용합니다.

 

import tensorflow as tf

x = tf.constant(35, name='x')
print(x)
y = tf.Variable(x + 5, name='y')

with tf.Session() as session:
    merged = tf.summary.merge_all()
    writer = tf.summary.FileWriter("/tmp/basic", session.graph)
    model =  tf.global_variables_initializer()
    session.run(model)
    print(session.run(y))

 

TensorBoard에 대해 자세히 알아보려면 시각화 강의로 이동하세요.