건프의 소소한 개발이야기

[Python - Tensorflow] Tensorflow 시작하기(1) 본문

개발 이야기/Machine Learning 이야기

[Python - Tensorflow] Tensorflow 시작하기(1)

건강한프로그래머 2016. 6. 4. 23:28

안녕하세요, 건프입니다.


이번엔 Python 기반의 Machine Learning 언어 및 플랫폼인 "Tensorflow"  를 사용해봅니다. 



1
2
3
4
5
6
7
8
9
import tensorflow as tf
import numpy as np
 
a = tf.constant([1,2,3])
b = tf.constant([[10, 20, 30], [100, 200, 300]])
c = tf.add(a,b)
 
with tf.Session() as sess:
    print sess.run(c)


우선 상수 tensor a와 b를 생성합니다 

이후, a 와 b를 더하는 tensor 인 c  를 생성합니다.

그리고 Session 을 열고 c를 run 합니다.

그 결과를 print 하면 다음과 같은 결과가 나타납니다.


a는 벡터이고
b는 행렬인데, 더하기 연산을 진행하니, 각각의 row 에 더해지는 연산을 하는 것을 알 수 있습니다.


만약 Session 을 열고 run 하지 않고
그대로 c를 프린트 한다면

import tensorflow as tf

import numpy as np


a = tf.constant([1,2,3])

b = tf.constant([[10, 20, 30], [100, 200, 300]])

c = tf.add(a,b)


#with tf.Session() as sess: 주석입니다

print c



얘는 Tensor 인데, 위와 같은 Attribute 를 가지고 있다는 것만 알려주네요.



1
2
3
4
5
6
7
8
9
t = tf.zeros([3,])
with tf.Session() as sess:
    print sess.run(t)
 
t1 = tf.random_uniform([1], -1, 1)
t2 = tf.random_uniform([2,2], 0, 1)
with tf.Session() as sess:
    print sess.run(t1)
    print sess.run(t2)


zero 매트릭스를 만드는 방법과 (one line 만 명시하면 결과로 보는 것과 같이 벡터로 만들어 집니다.)

크기에 따른 랜덤 매트릭스를 만드는 방법이다.

첫번째 인자 : 만들 매트릭스 크기 지정

두번째 인자 : 범위 시작 값

세번째 인자 : 범위 끝 값


자 그렇다면 행렬간 곱하기를 진행해봅니다.


1행 2열 짜리 Matrix 와 2행 1열 짜리 Matrix 를 만들어서 곱한 결과를 출력하려고 합니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import tensorflow as tf
import numpy as np
 
mat1 = tf.constant([[2,3]])
mat2 = tf.constant([[2], [5]])
product = tf.matmul(mat1, mat2)
cons = tf.constant(1)
 
with tf.Session() as sess:
    print mat1
    print mat1.eval()
    print sess.run(mat1)
    print sess.run(product)
    print product
    print cons


위와 같이 뽑았을때 결과는 다음과 같습니다.


마지막에 일반 상수를 뽑아본 이유는

Matrix * Matrix 가 [[19]] 이런식으로 출력이 되는데, 이것이 스칼라인지 벡터인지 메트릭스 인지 확인하고 싶었기 때문입니다.

일반적으로 스칼라가 되어야 생각을 하는데,

직접 뽑아보니까 스칼라가 아니라 1 by 1 벡터가 나오네요.



그럼 tensorflow 에서 변수를 선언해 보겠습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#-*- coding: utf-8 -*-
import tensorflow as tf
import numpy as np
 
state1 = tf.Variable(0, name="counter")
init_op = tf.initialize_all_variables()
 
with tf.Session() as sess:
    print "sess.run(init_op): ", sess.run(init_op)
    print "sess.run(state1): ", sess.run(state1)
     
    print "state1.assign(2):", state1.assign(2)
    print "sess.run(state1): ", sess.run(state1)
    """
    여기서 변수값이 2이 아니라 그전 변수값인 0이 나온 이유는
    state1.assign(2) 자체는 tensor 를 생성하는 행위이고
    따라서 변수값 변경이 적용되도록 만드려면, 다음과 같이 작업해주어야 합니다.
    """
    assign_op = state1.assign(2)
    print "sess.run(assign_op): ", sess.run(assign_op)
    print "sess.run(state1): ", sess.run(state1).




이것으로 tensor 의 존재감과 구조를 명백하게 확인할 수 있습니다.


tensor 는 만들기만 해서는 적용되지 않습니다.

Session 으로 실제로 실행시켜주어야 그 의미를 같습니다.


다음 포스팅에서 이어서 진행할께요~


도움이 되었길 바랍니다.


고맙습니다 :)

Comments