[Deep Learning] Tensorflow 설치 및 기본 사용법
CS/Deep Learning

[Deep Learning] Tensorflow 설치 및 기본 사용법

Tensorflow 설치

텐서플로우란 데이터 플로우 그래프를 사용하여 수치 연산을 하는 오픈소스 소프트웨어 라이브러리

(참고 https://tensorflowkorea.gitbooks.io/tensorflow-kr/content/g3doc/)


Anaconda 설치

- 가상환경 만들어줌

- https://www.anaconda.com/distribution/ 

 

Anaconda Python/R Distribution - Free Download

Anaconda Distribution is the world's most popular Python data science platform. Download the free version to access over 1500 data science packages and manage libraries and dependencies with Conda.

www.anaconda.com

 

Tensorflow 설치

- 설치한 anaconda prompt를 관리자 권한으로 실행

//tensorflow라는 이름의 환경을 만드는데 안에 python모듈이 탑재될 것이다.
conda create -n tensorflow python=3.7

//가상 환경으로 진입
conda activate tensorflow

//Tensorflow 설치
conda install tensorflow==1.13.1

//버전확인. 마지막 줄 언더바(_) 두개
python
>>>import tensorflow as tf
>>>tf.__version__

 

 

Jupyter notebook 설치

- Anaconda Navigator를 실행후 설치

- Anaconda prompt에 jupyter notebook 치면 해당 창으로 이동

- shift + enter 누르면 하나의 boundary 실행

 


Tensorflow 기본

1. Session

위의 이미지의 그래프에서 노드(Node)는 수치 연산을 나타내고 엣지(edge)는 노드 사이를 이동하는 다차원 데이터 배열(텐서,  tensor)를 나타낸다.

 

텐서플로우는 계산을 수행할때 graph를 정의한다. 실제로 값을 출력하려면 이 정의된 그래프에서 input값을 넣어서 실행해야 하는데, 세션(Session)을 생성하여 그래프를 실행해야 한다. 세션은 그래프를 인자로 받아서 실행을 해주는 일종의 러너(Runner)라고 생각하면 된다. 

 

2) Constant

Constant는 상수를 저장하는 데이터 형이다.

tf.constant(
    value, //무슨값
    dtype=None, //그 값의 type
    shape=None,
    name='Const',
    verify_shape=False
)

위의 데이터형을 C에 비추어 생각해보자. C언어에서 int i=1;을 대입해보면

value = 1

dtype = int

shape= [1]

name = i

라고 생각할 수 있다. 

 

# session & constant

import tensorflow as tf

//나머지 값은 자동 설정 가능
constant_value = tf.constant("Deep Learning course")
print(constant_value)

ten = tf.constant(10)
nine = tf.constant(9)
nineteen = tf.add(ten, nine)
print(nineteen)

constant_array = tf.constant([1, 2])
print(constant_array)

print("=======================")
sess = tf.Session()
print(sess.run(constant_value))
print(sess.run([ten, nine, nineteen]))
print(sess.run(constant_array))

sess.close()

'''Result
Tensor("Const:0", shape=(), dtype=string)
Tensor("Add:0", shape=(), dtype=int32)
Tensor("Const_3:0", shape=(2,), dtype=int32)
=======================
b'Deep Learning course'
[10, 9, 19]
[1 2]
'''

위의 코드에서 보면 print(nineteen)을 해주면 우리가 원하는 값이 나오는 것이 아닌 tensor에 대한 정보만 나온다. 따라서 아래에서 tf.Session()을 통해 session을 한번 open 해주고 print를 해주어야 원하는 값이 출력된다.

 

3) Placeholder

Placeholder는 학습용 데이터를 담는 그릇/데이터 타입을 의미한다. 즉 y = f(x)를 그래프를 통해 실행한다고 했을 때 학습을 위한 데이터 x를 담는다.

tf.placeholder(
    dtype,
    shape=None,
    name=None
)

placeholder는 선언과 동시에 초기화가 아니라 일단 선언 후 나중에 값을 전달한다. 따라서 반드시 실행시 데이터가 제공되어야 한다.

 

4) Variable

Variable은 학습을 통해서 구해야 하는 값을 나타내는 데이터형이다. 다시 말하면 y = W * x + b라는 식이 있을 때 W, b에 해당한다. 이 값은 tensor 자체에서 random하게 할당하며 학습시킬때마다 우리가 원하는 값을 찾게 된다.

tf.Variable.__init__(
	initial_value=None, 
	trainable=True, 
	collections=None,
	validate_shape=True, 
	caching_device=None, 
	name=None, 
	variable_def=None, 
	dtype=None,
	expected_shape=None, 
	import_scope=None
)

 

# Placeholder & Variable

import tensorflow as tf

#총 몇개의 데이터인지 모르므로 None, 3개의 배열로 이루어짐
X = tf.placeholder(tf.float32, [None, 3])
print(X)

x_data = [[1, 2, 3], [4, 5, 6]]

W = tf.Variable(tf.random_normal([3, 2]))
b = tf.Variable(tf.random_normal([2, 1]))

#matrix곱 X * W
expr = tf.matmul(X, W) + b

sess = tf.Session()
#전체 variable 초기값 설정 필요
sess.run(tf.global_variables_initializer())

print(x_data)
#설정된 초기값 확인
print(sess.run(W))
print(sess.run(b))

#feed_dict: 값 설정
print(sess.run(expr, feed_dict={X: x_data}))

sess.close()

'''
Tensor("Placeholder:0", shape=(?, 3), dtype=float32)
[[1, 2, 3], [4, 5, 6]] -> x 데이터
[[-0.5147466   0.142672  ] -> W (랜덤하게 값 변함)
 [-2.075296    0.53945816]
 [-0.8668292  -0.32925156]]
[[ 0.20102066] -> b (랜덤하게 값 변함)
 [-1.2642003 ]]
[[ -7.0648055    0.43485433] -> Wx + b
 [-18.900642     0.02826917]]
'''

 

 

728x90
반응형

'CS > Deep Learning' 카테고리의 다른 글

[Deep Learning] Cross-entropy  (0) 2020.04.05
[Deep Learning] 활성화 함수(Activation function)  (0) 2020.04.05
[Deep Learning] MLP(Multi-layer perceptrons)  (0) 2020.03.28
[Deep Learning] MNIST  (0) 2020.03.24
[Deep Learning] Introduction  (0) 2020.03.23