tf.contrib.learn


tf.contrib.learn은 다음을 포함하여 머신러닝의 메커니즘을 단순화하는 상위 레벨의 TensorFlow 라이브러리입니다.

  • running training loops
  • running evaluation loops
  • managing data sets
  • managing feeding

tf.contrib.learn은 많은 일반 모델을 정의합니다. 



Basic usage


tf.contrib.learn을 사용하면 linear regression 프로그램이 얼마나 단순해지는지 알 수 있습니다.

import tensorflow as tf
# NumPy is often used to load, manipulate and preprocess data.
import numpy as np

# Declare list of features. We only have one real-valued feature. There are many
# other types of columns that are more complicated and useful.
features
= [tf.contrib.layers.real_valued_column("x", dimension=1)]

# An estimator is the front end to invoke training (fitting) and evaluation
# (inference). There are many predefined types like linear regression,
# logistic regression, linear classification, logistic classification, and
# many neural network classifiers and regressors. The following code
# provides an estimator that does linear regression.
estimator
= tf.contrib.learn.LinearRegressor(feature_columns=features)

# TensorFlow provides many helper methods to read and set up data sets.
# Here we use `numpy_input_fn`. We have to tell the function how many batches
# of data (num_epochs) we want and how big each batch should be.
x
= np.array([1., 2., 3., 4.])
y
= np.array([0., -1., -2., -3.])
input_fn
= tf.contrib.learn.io.numpy_input_fn({"x":x}, y, batch_size=4,
                                              num_epochs
=1000)

# We can invoke 1000 training steps by invoking the `fit` method and passing the
# training data set.
estimator
.fit(input_fn=input_fn, steps=1000)

# Here we evaluate how well our model did. In a real example, we would want
# to use a separate validation and testing data set to avoid overfitting.
estimator
.evaluate(input_fn=input_fn)

실행 결과는 다음과 같습니다. 

    {'global_step': 1000, 'loss': 1.9650059e-11}



A custom model


tf.contrib.learn은 미리 정의된 모델들만 제공하지 않습니다. TensorFlow에 내장되어 있지 않은 커스텀 모델을 만들 수 있습니다. tf.contrib.learn의 data set, feeding, training 등 높은 수준의 추상화는 유지할 수 있습니다. 설명을 위해, 낮은 수준은 TensorFlow API를 이용하여 linear regression에 대한 equivalent 모델을 구현하는 방법을 나타냅니다.


tf.contrib.leanr을 이용하여 커스텀 모델을 정의하기 위해, tf.contrib.learn.Estimator를 사용해야 합니다. tf.contrib.learn.LinearRegressor는 tf.contrib.learn.Estimator의 서브 클래스입니다. Estimator를 sub-classing하는 대신에 Estimator에 model_fn 함수를 제공합니다. tf.contrib.learn은 prediction, training step, loss를 evaluate할 수 있는 방법을 알려줍니다. 코드는 다음과 같습니다. 

import numpy as np
import tensorflow as tf
# Declare list of features, we only have one real-valued feature
def model(features, labels, mode):
 
# Build a linear model and predict values
  W
= tf.get_variable("W", [1], dtype=tf.float64)
  b
= tf.get_variable("b", [1], dtype=tf.float64)
  y
= W*features['x'] + b
 
# Loss sub-graph
  loss
= tf.reduce_sum(tf.square(y - labels))
 
# Training sub-graph
  global_step
= tf.train.get_global_step()
  optimizer
= tf.train.GradientDescentOptimizer(0.01)
  train
= tf.group(optimizer.minimize(loss),
                   tf
.assign_add(global_step, 1))
 
# ModelFnOps connects subgraphs we built to the
 
# appropriate functionality.
 
return tf.contrib.learn.ModelFnOps(
      mode
=mode, predictions=y,
      loss
= loss,
      train_op
=train)

estimator
= tf.contrib.learn.Estimator(model_fn=model)
# define our data set
x
=np.array([1., 2., 3., 4.])
y
=np.array([0., -1., -2., -3.])
input_fn
= tf.contrib.learn.io.numpy_input_fn({"x": x}, y, 4, num_epochs=1000)

# train
estimator
.fit(input_fn=input_fn, steps=1000)
# evaluate our model
print(estimator.evaluate(input_fn=input_fn, steps=10))

결과는 다음과 같습니다.

{'loss': 5.9819476e-11, 'global_step': 1000}

커스텀 모델 함수의 내용이 낮은 수준 API의 수동 모델 training loop와 얼마나 유사한지 주목하세요.



출처


'머신러닝 > TensorFlow' 카테고리의 다른 글

tf.train API  (0) 2017.03.07
TensorFlow Core tutorial  (0) 2017.02.28
설치하기  (2) 2017.02.21
TensorFlow란?  (0) 2017.02.21

tf.train API


머신러닝의 자세한 이론적 내용은 이 튜토리얼의 범위를 벗어납니다. 그러나 TensorFlow는 loss function을 최소화하기 위해 각 variable을 천천히 변경하는 optimizer를 제공합니다. 가장 간단한 optimizer는 gradient desent 방법입니다. 해당 variable에 대한 loss의 derivative의 magnitude에 따라 각 variable을 수정합니다. 일반적으로 수동으로 symbolic derivative를 계산하는 것은 지루하고 오류가 발생하기 쉽습니다. 결과적으로, TensorFlow는 tf.gradients 함수를 사용하여 model의 description만 제공된 derivative를 자동으로 생성할 수 있습니다. 단순화를 위해 일반적으로 optimizer를 수행합니다. 

optimizer = tf.train.GradientDescentOptimizer(0.01)
train
= optimizer.minimize(loss)
sess.run(init) # reset values to incorrect defaults.
for i in range(1000):
  sess
.run(train, {x:[1,2,3,4], y:[0,-1,-2,-3]})

print(sess.run([W, b]))

최종 model 매개변수가 생성됩니다.

[array([-0.9999969], dtype=float32), array([ 0.99999082], dtype=float32)]

이제 실제 머신러닝을 해봤습니다. 이런 간단한 linear regression을 수행한다면 TensorFlow 핵심 코드가 많이 필요하지는 않지만, 좀 더 복잡한 model과  data를 입력하는 method는 더 많은 코드가 필요합니다. 따라서 TensorFlow는 일반적인 패턴, 구조 및 기능에 대해 더 높은 level의 추상화를 제공합니다. 우리는 다음 section에서 이러한 추상화를 사용하는 방법을 배웁니다.


complete program


완성된 training 가능한 linear regression model은 다음과 같습니다.

import numpy as np
import tensorflow as tf

# Model parameters
W
= tf.Variable([.3], tf.float32)
b
= tf.Variable([-.3], tf.float32)
# Model input and output
x
= tf.placeholder(tf.float32)
linear_model
= W * x + b
y
= tf.placeholder(tf.float32)
# loss
loss
= tf.reduce_sum(tf.square(linear_model - y)) # sum of the squares
# optimizer
optimizer
= tf.train.GradientDescentOptimizer(0.01)
train
= optimizer.minimize(loss)
# training data
x_train
= [1,2,3,4]
y_train
= [0,-1,-2,-3]
# training loop
init
= tf.global_variables_initializer()
sess
= tf.Session()
sess
.run(init) # reset values to wrong
for i in range(1000):
  sess
.run(train, {x:x_train, y:y_train})

# evaluate training accuracy
curr_W
, curr_b, curr_loss  = sess.run([W, b, loss], {x:x_train, y:y_train})
print("W: %s b: %s loss: %s"%(curr_W, curr_b, curr_loss))

실행하면 다음과 같은 결과를 보여줍니다.

W: [-0.9999969] b: [ 0.99999082] loss: 5.69997e-11

좀 더 복잡한 이 프로그램은 여전히 TensorBorad에서 시각화 할 수 있습니다.

TensorBoard final model visualization

출처





'머신러닝 > TensorFlow' 카테고리의 다른 글

tf.contrib.learn  (0) 2017.03.08
TensorFlow Core tutorial  (0) 2017.02.28
설치하기  (2) 2017.02.21
TensorFlow란?  (0) 2017.02.21

Tensors


TensorFlow에서 데이터의 중심 단위는 Tensor 입니다. Tensor는 다차원 배열의 primitive value 집합으로 구성됩니다. Tensor의 rank는 차원의 수를 의미합니다. 아래 예제가 있습니다.

3 # a rank 0 tensor; this is a scalar with shape []
[1. ,2., 3.] # a rank 1 tensor; this is a vector with shape [3]
[[1., 2., 3.], [4., 5., 6.]] # a rank 2 tensor; a matrix with shape [2, 3]
[[[1., 2., 3.]], [[7., 8., 9.]]] # a rank 3 tensor with shape [2, 1, 3]

여기서 primitive value는 숫자나 문자열 같은 원시적인 값들을 의미합니다.


TensorFlow Core tutorial



Importing TensorFlow


TensorFlow 프로그램에 대한 표준 import 방법은 다음과 같습니다.

import tensorflow as tf

이렇게 하면 python에서 TensorFlow의 모든 class, method 및 symbol을 access 할 수 있습니다. as tf는 tensorflow라는 모듈 이름이 길기 때문에 tf로 사용하겠다는 의미입니다.


The Computational Graph


TensorFlow Core 프로그램은 두 개의 섹션으로 구성되어 있다고 할 수 있습니다.

  1. computational graph 빌드
  2. computational graph 실행

Computational graph는 일련의 TensorFlow 작업을 node graph로 배열한 것 입니다. 간단한 computational graph를 작성해 봅시다. 각 node는 0 이상의 tensor를 입력으로 받으며, 출력으로써 tensor를 생성합니다. constant는 node의 type중 하나 입니다. TensorFlow의 constant도 일반적인 constant와 마찬가지로 입력을 받지 않고 내부적으로 저장된 값을 출력합니다. 다음과 같이 두 개의 floating point형 tensor node1과 node2를 만들 수 있습니다.

node1 = tf.constant(3.0, tf.float32)
node2
= tf.constant(4.0) # also tf.float32 implicitly
print(node1, node2)

여기서 자료형을 명시하지 않으면 floating point형에 대해서 default값으로 float32 자료형이 설정되는 듯 합니다.

마지막 print 문의 결과는 다음과 같습니다.

Tensor("Const:0", shape=(), dtype=float32) Tensor("Const_1:0", shape=(), dtype=float32)
우리가 예상하기로는 3.0과 4.0의 출력 이였지만 결과는 그렇지 않습니다. node가 evaluate될 때 3.0, 4.0을 생성합니다. node를 실제로 evaluate할려면 session 내에서 computational graph를 실행해야 합니다. session은 TensorFlow runtime의 control과 state를 캡슐화 합니다.

다음 코드는 session 객체를 만든 다음 run method를 호출하여 node1과 node2를 계산할 수 있는 computational graph를 실행합니다.
session에서 computational graph는 다음과 같습니다.
sess = tf.Session()
print(sess.run([node1, node2]))

우리의 예상과 같이 3.0과 4.0을 볼 수 있습니다.

[3.0, 4.0]

tensor node를 operation과 결합하여 좀 더 복잡한 계산을 할 수 있습니다(operation 또한 node 입니다). 예를 들면, 두 개의 constant node를 add하고 다음과 같이 새로운 graph를 생성할 수 있습니다.

node3 = tf.add(node1, node2)
print("node3: ", node3)
print("sess.run(node3): ",sess.run(node3))

print 두 줄의 결과는 다음과 같습니다.

node3:  Tensor("Add_2:0", shape=(), dtype=float32)
sess
.run(node3):  7.0

첫 번째 print 결과는 node를 session 내에서 실행하지 않았기 때문에 tensor의 속성이 출력 되었습니다.

TensorFlow는 TensorBoard라고 불리는 utility를 제공합니다. 이는 computational graph를 그림으로 나타낼 수 있습니다. 다음은 TensorBoard가 graph를 시각화 하는 방법을 보여주는 스크린샷 입니다.

TensorBoard screenshot

placeholder는 외부 입력을 허용하도록 graph를 매개변수화 할 수 있습니다. placeholder는 값을 나중에 변경할 수 있습니다.

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

두 개의 입력 매개변수(a와 b)를 정의하고 이들에 대한 연산을 정의합니다. feed_dict 매개변수를 사용하여 placeholder에 값을 입력할 수 있습니다. 

print(sess.run(adder_node, {a: 3, b:4.5}))
print(sess.run(adder_node, {a: [1,3], b: [2, 4]}))

결과는 다음과 같습니다.

7.5
[ 3.  7.]

TensorBoard에서는 다음과 같이 표현됩니다.

TensorBoard screenshot

다른 operation을 추가하여 computational graph를 좀 더 복잡하게 만들 수 있습니다. 예를 들면,

add_and_triple = adder_node * 3.
print(sess.run(add_and_triple, {a: 3, b:4.5}))

결과는 다음과 같습니다.

22.5

이 computational graph는 TensorBoard에서 다음과 같이 표현됩니다.

TensorBoard screenshot

머신러닝에서 우리는 일반적으로 위와 같은 임의의 입력을 받을 수 있는 model을 원할 것입니다. model을 학습 가능하게 만들려면 동일한 입력으로 새로운 출력을 얻기 위해 graph를 수정할 수 있어야 합니다. Variable을 사용하면 graph에 학습 가능한 매개변수를 추가할 수 있습니다. Variable은 타입과 초기값으로 구성됩니다.

W = tf.Variable([.3], tf.float32)
b
= tf.Variable([-.3], tf.float32)
x
= tf.placeholder(tf.float32)
linear_model
= W * x + b

여기서 [.3]은 0.3을 [-.3]은 -0.3을 의미합니다.

constant는 tf.constant를 호출할 때 초기화 되며 값은 절대로 변경될 수 없습니다. 이와 반대로, tf.Variable을 호출하면 variable이 초기화되지 않습니다. TensorFlow 프로그램의 모든 variable을 초기화하려면 다음과 같이 특별한 operation을 명시적으로 호출해야 합니다.

init = tf.global_variables_initializer()
sess
.run(init)

여기서 init은 모든 global variable을 초기화하고 있습니다. sess.run을 호출하기 전까지는 variable은 초기화되지 않습니다. x는 placeholder이므로, 다음과 같이 x의 여러 값에 대해 linear_model을 동시에 evaluate할 수 있습니다.

print(sess.run(linear_model, {x:[1,2,3,4]}))

결과는 다음과 같습니다.

[ 0.          0.30000001  0.60000002  0.90000004]

우리는 model을 만들었지만 이 model이 얼마나 좋은지는 알 수 없습니다. training data에 대해 model을 evaluate해야 합니다. 이는 목표 값을 제공하기 위해 y placeholder가 필요하며, loss function을 추가해야 합니다. 여기서 y는 training data set을 의미합니다. loss function은 cost function과 같은 의미입니다.


loss function은 제공된 data로부터 현재 model이 얼마나 떨어져 있는지를 측정합니다. 표준 loss model인 linear regression을 사용합니다. linear regression은 현재 model과 제공된 data 사이의 delta 제곱을 더해서 계산합니다. linear_model - y는 각 요소가 error delta인 vector를 만듭니다. tf.square를 호출하여 error를 제곱합니다. 그런 다음 모든 제곱 error를 합산하여 단일 scalar를 만듭니다. 이 과정은 tf.reduce_sum을 사용하여 계산할 수 있습니다. training data와 설계한 linear_model과의 차이의 제곱의 합을 계산합니다.

y = tf.placeholder(tf.float32)
squared_deltas
= tf.square(linear_model - y)
loss
= tf.reduce_sum(squared_deltas)
print(sess.run(loss, {x:[1,2,3,4], y:[0,-1,-2,-3]}))

loss 값은 다음과 같습니다.

23.66

W와 b의 값을 -1에서 1의 값으로 재할당하여 수동으로 향상시킬 수 있습니다. variable은 tf.Variable을 사용하여 제공된 값으로 초기화 되지만, tf.assign operation을 사용하여 변경할 수 있습니다. 예를 들면, W=-1, b=1은 우리 model에 대한 최적의 매개변수 입니다. 이에 따라 W와 b를 변경할 수 있습니다.

fixW = tf.assign(W, [-1.])
fixb
= tf.assign(b, [1.])
sess
.run([fixW, fixb])
print(sess.run(loss, {x:[1,2,3,4], y:[0,-1,-2,-3]}))

마지막 print는 loss가 0임을 보여줍니다.

0.0

우리는 W와 b의 "완벽한" 값을 추측하고 적용하였습니다. 그러나 머신러닝의 요점은 올바른 model의 매개변수를 자동으로 찾는 것 입니다. 다음 섹션에서 이를 수행하는 방법을 보여줍니다.


여기까지 실행 결과 입니다.



소스 코드도 첨부하였습니다.

PythonApplication1.py



출처


'머신러닝 > TensorFlow' 카테고리의 다른 글

tf.contrib.learn  (0) 2017.03.08
tf.train API  (0) 2017.03.07
설치하기  (2) 2017.02.21
TensorFlow란?  (0) 2017.02.21

TensorFlow는 여러 OS를 지원하며 Windows를 공식 지원합니다.


본인은 Windows 10에 설치하였으며,


공식 홈페이지의 설치 가이드를 참고하였습니다.



설치할 TensorFlow를 결정


CPU 혹은 GPU 지원 TensorFlow를 선택해야 합니다.

    • CPU support only. NVIDIA GPU가 없다거나 GPU가 없는 노트북 등의 경우에는 이 버젼으로 설치해야 합니다. 이 버젼이 설치하기 쉽다고 합니다(5~10분 정도 소요). 때문에 NVIDIA GPU가 있더라도 이 버젼으로 설치를 권장하고 있습니다.
    • GPU support. TensorFlow 프로그램은 일반적으로 CPU보다 GPU에서 더 빠르게 수행됩니다. 때문에 GPU 조건을 만족하고 성능이 중요한 프로그램을 실행해야할 경우는 이 버젼으로 설치해야 합니다.


GPU support 요구사항


GPU 지원 TensorFlow를 설치하는 경우 관련 NVIDIA 소프트웨어가 설치되어야 합니다.

    • CUDA® Toolkit 8.0. https://developer.nvidia.com/cuda-downloads에서 Windows 10 버젼으로 다운로드하여 설치하였습니다. local 설치 파일의 경우 용량이 꽤 됩니다(1.3GB). 본인의 Windows 버젼에 따라 다운로드하여 설치하시길 바랍니다. 설치 후 CUDA가 설치되는 경로를 알아둬야 합니다. cuDNN 설치시 필요하기 때문입니다. 본인의 경우는 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0 입니다.
    • cuDNN v5.1. https://developer.nvidia.com/cudnn 에서 cuDNN v5.1 for Windows 10을 다운로드 하였습니다. NVIDIA 계정으로 로그인해야 다운 받을 수 있습니다. 계정 가입은 간단한 설문과 이메일 인증을 통해 이루어집니다. 다운로드 받은 파일의 압축을 풀면 cuda 라는 폴더가 있습니다. cuda 폴더 내부에는 bin, include, lib 폴더가 존재합니다. 이 세개의 폴더를 CUDA가 설치된 경로의 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0 에 복사하여 덮어쓰면 됩니다.
    • GPU card가 CUDA Compute Capability 3.0 혹은 그 이상을 만족해야 합니다. https://developer.nvidia.com/cuda-gpus 여기서 리스트를 확인할 수 있습니다. 일반적으로 GeForce 제품을 사용하므로 관련 리스트를 확인하시면 됩니다. 본인의 GPU는 GTX 1050이며 Compute Capability 6.1이므로 요구사항에 만족하는 것을 알 수 있습니다.

상기 소프트웨어에 대해 이전 버젼이 설치된 경우는 지정된 버젼으로 업그레이드를 해야 합니다.



TensorFlow 설치 방법 결정


TensorFlow를 설치하는 매커니즘을 선택해야 합니다.

    • "native" pip
    • Anaconda

Native pip는 가상 환경을 이용하지 않고 시스템에 TensorFlow를 직접 설치합니다. Native pip를 설치하면 어떤 디렉토리에서도 TensorFlow 프로그램을 실행할 수 있습니다.


Anaconda는 가상 환경을 이용합니다. 

Anaconda는 Continuum Analytics라는 곳에서 만든 Python 배포판으로, 여러가지 패키지(수학, 과학 등)를 포함하고 있습니다. 가상 환경을 이용하기 때문에 다른 패키지끼리의 충돌이나 다른 버전으로 인한 충돌을 막아준다고 합니다.

NOTE: TensorFlow는 anaconda 패키지를 테스트하거나 유지 관리하지 않습니다. Anaconda에 의해 발생되는 문제 등은 책임질 수 없다는 의미 같습니다. 


많은 사용자들이 Windows 환경에서 anaconda를 이용하여 TensorFlow를 설치하는 것으로 보입니다. 본인은 native pip으로 설치를 진행하겠습니다.



native pip로 설치하기


Python 3.5.x 버전을 설치해야 합니다.

TensorFlow는 Windows 환경에서 오직 3.5.x 버젼의 python만을 지원합니다. 


TensorFlow를 설치하려면 터미널을 실행해야 합니다. 터미널에서 아래와 같은 명령을 실행해야 합니다. Python을 설치하실때 Add Pyhon 3.5 to PATH를 체크하셔야 터미널에서 pip3 명령을 수행할 수 있습니다. TensorFlow CPU 전용 버전을 설치하려면 아래와 같이 명령을 입력해야 합니다.

C:\> pip3 install --upgrade tensorflow

GPU 버젼을 설치하려면 아래와 같은 명령을 입력해야 합니다.

C:\> pip3 install --upgrade tensorflow-gpu

본인은 GPU 버젼으로 설치하였습니다.



TensorFlow가 성공적으로 설치되었다면 위와 같은 화면이 나와야 합니다.


설치확인


TensorFlow가 제대로 설치되었는지 유효성을 검사할 수 있습니다.


1. 터미널을 실행합니다.

2. Anaconda를 통해 설치한 경우 Anaconda 환경을 활성화합니다.

3. 터미널에서 Python을 실행합니다.

  1. C:> python 

4. Python shell에서 다음을 입력합니다.

  1. >>> import tensorflow as tf hello = tf.constant('Hello, TensorFlow!') sess = tf.Session() print(sess.run(hello))

Python 프로그램이 아래와 같은 output을 출력한다면 성공적으로 설치된 것입니다. 

Hello, TensorFlow!


아래와 같이 오류가 발생한다면 MSVCP140.DLL 파일이 없기 때문입니다.

    • No module named "_pywrap_tensorflow"

    • DLL load failed.

Visual C++ 2015 redistributable 을 설치해주셔야 합니다.




출처


'머신러닝 > TensorFlow' 카테고리의 다른 글

tf.contrib.learn  (0) 2017.03.08
tf.train API  (0) 2017.03.07
TensorFlow Core tutorial  (0) 2017.02.28
TensorFlow란?  (0) 2017.02.21

텐서플로(TensorFlow)는 구글 제품에 사용되는 머신러닝(기계학습)을 위한 오픈소스 소프트웨어 라이브러리 입니다. 구글 내 연구와 제품개발을 위한 목적으로 구글 브레인팀이 만들었고 2015년 11월 9일 아파치 2.0 오픈소스 라이센스로 공개되었습니다.


아파치 2.0 오픈소스 라이센스는 누구나 해당 소프트웨어에서 파생된 프로그램을 제작할 수 있으며 저작권을 양도, 전송할 수 있는 라이센스 규정을 의미합니다. 아파치 라이센스에 따르면 누구든 자유롭게 아파치 소프트웨어를 다운 받아 부분 혹은 전체를 개인적 혹은 상업적 목적으로 이용할 수 있으며 재배포시에는 원본 소스 코드 또는 수정한 소스 코드를 반드시 포함시켜야 하는 것은 아니고 아파치 라이센스 버전 2.0을 포함시켜야 하며 아파치 소프트웨어 재단에 개발된 소프트웨어라는 것을 명확하게 밝혀야 합니다.


한 마디로 "출처만 밝히고 마음대로 이용하렴" 입니다. OpenCV(Open Source Computer Vision)를 자주 이용하는 입장으로서 BSD 라이센스가 생각나지 않을 수 없습니다. 아파치 2.0 오픈소스 라이센스와 BSD 라이센스가 내용적인 측면에서 어떠한 차이점을 가지고 있는지는 잘 모르겠습니다. 둘 다 같은 목적인 듯 합니다만.. 

BSD(Berkeley Software Distribution) 라이센스는 소프트웨어 라이센스라고도 할 수 없을 만큼 미약하여, 해당 소프트웨어는 아무나 개작할 수 있고, 수정한 것을 제한 없이 배포할 수 있습니다. 수정본의 재배포는 의무적인 사항이 아니므로 BSD 라이센스를 갖는 프로그램은 공개하지 않아도 되는 상용 소프트웨어에서도 사용할 수 있습니다. 

LICENSE.TXT 및 README.txt 포함 의무가 있습니다. LICENSE.txt는 BSD 라이센스의 대한 내용이며 README.txt는 OpenCV 홈페이지 및 관련 게시판 주소 링크 등 기본적인 정보입니다. 이러한 제약없는 제약(?) 때문에 많은 산업 현장에서 OpenCV가 사용되고 있는 것으로 알고 있습니다. 


같은 이유로 텐서플로는 많은 산업 현장에 사용될 것으로 예상됩니다. 이미 많이 사용하고 있을지도 모르겠습니다. 구글은 머신러닝 라이브러리인 텐서플로를 거의 제약이 없는 라이센스로 배포함으로써 머신러닝의 거대한 인프라를 구축할 수 있을 것입니다. 표면적으로는 기술의 발전과 정보의 공유의 목적이 있겠지만 거대한 인프라 구축을 통한 머신러닝 시장 점유율 확보에 대한 느낌을 지울 수는 없습니다. 이 부분이 옳지 못한 것은 아닙니다. 구글의 앞선 기술력과 발빠른 전략이라고 생각합니다.


텐서플로는 안드로이드와 iOS와 같은 모바일 환경은 물론 64비트 리눅스, MacOS의 데스크탑이나 서버 시스템의 여러개의 CPU와 GPU에서 구동될 수 있습니다.


  • 데이터 플로우 그래프

데이터 플로우 그래프는 수학 계산과 데이터의 흐름을 노드(Node)와 엣지(Edge)를 사용한 방향 그래프(Directed Graph)로 표현합니다.

노드는 수학적 계산, 데이터 입/출력, 그리고 데이터의 읽기/저장 등의 작업을 수행합니다. 엣지는 노드들 간 데이터의 입출력 관계를 나타냅니다. 엣지는 동적 사이즈의 다차원 데이터 배열(=텐서)을 실어나르는데, 여기에서 텐서플로우라는 이름이 지어졌습니다.


  • 특징

- 데이터 플로우 그래프를 통한 풍부한 표현력

- 코드 수정 없이 CPU/GPU 모드로 동작

- 아이디어 테스트에서 서비스 단계까지 이용 가능

- 계산 구조와 목표 함수만 정의하면 자동으로 미분 계산을 처리

- Python/C++를 지원하며, SWIG를 통해 다양한 언어 지원 가능

SWIG(Simplified Wrapper and Interface Generator)는 c나 c++로 작성된 컴퓨터 프로그램이나 라이브러리들을 다른 언어들과 연결하는데 사용하는 오픈 소스 소프트웨어 도구이다.



출처


'머신러닝 > TensorFlow' 카테고리의 다른 글

tf.contrib.learn  (0) 2017.03.08
tf.train API  (0) 2017.03.07
TensorFlow Core tutorial  (0) 2017.02.28
설치하기  (2) 2017.02.21

+ Recent posts