TensorFlow 메커니즘 기초

 

-Tensor

텐서는 기본 자료구조이며, 그래프에서 edge를 따라 흐르는 값을 의미

텐서는 다차원 배열 리스트로 구성

rank, shape, type 세 가지의 매개변수를 가짐


Tensor = rank + shape + type

차원 행,열 타입

 

 

 

Rank

ex) Rank = 1 : 1차원 2차원 3차원 4차원

Shape = 7*1 5*7 (ex) 20 * 100* 30 (ex)10*20*100*30

 

 


 

① 텐서플로우는 각 노드 (Node)  엣지 (Edge)로 구성된 그래프로 표현

② 그래프의 각 node들은 operation을 의미함

 

쉽게 말해

--------- 이것은 두 개의 노드와 하나의 엣지로 표현된 그래프이다.

 

 

 


- Operation

이름을 가지는 추상적인 연산

 

Element-wise mathematical operations Mul : [ 100x20 ] x [100x20 ]
-> 각각의 요소에 대해 곱셈
vs
Matrix operations MatMul : [100x20] x [20x10]
-> 행렬에 대한 곱셈

 

 

Graph-construction time (그래프가 생성될 때)

operation(=노드)이 생성

 

* 딥 러닝에 사용되는 대표적인 예로는 operation 및 class 로는

constant , Variable, placeholder, Matrix operation, neural-net building block등이 있음


- TensorFlow 코드 맛보기

(아래 그래프에서 도형들이 노드이고 , 선이 엣지)

 

위 코드에서 costfunction의 정의와Optimizer의 정의는 나와있지 X

(각 층의 MatMul, Add, ReLU 등의 Run만 보여줌)

*optimizer : 프로그램을 실행하기 위해 기억영역 축소, 시간 단축 등을 하는 과정

말 그대로 받아들이자 - 최적화 -

import tensorflow as tf tensorflow라는 패키지를 불러와 tf로 사용하겠다 선언
b = tf.Variable(tf.zeros[100]) b = tf.Variable( tf.zeros[100])
b변수선언 (100x1짜리 벡터를 0으로 초기화 시킴)

W = tf.Variable(tf.random_uniform([784, 100], -1,1) W = tf.Variable(tf.random_uniform([784, 100], -1,1)
W변수선언([784x100]짜리 행렬을 -1,1사이 값 무작위로 채우기)
x = tf.placeholder (name = "x") placeholder를 통해 이름x만 지정해주고 값은 나중에 넣겠다 선전포고
relu = tf.nn.relu(tf.matmul(W,x) + b) matmul (W,x) + b :
행렬연산 (행렬W와 행렬x를 곱하고 , b까지 더한다)


reu = tf.nn.relu (★):
★에 relu 함수를 씌운다 !

 

s = tf.Session() session () : 구성해 놓은 그래프를 사용하라는 명령
for step in xrange(0,10) : (0,10) : [0,1,2,3,4,5,6,7,8,9] list
input = ...construct 100-D input array ...
result = s.run(C, feed_dict = {x : input})
print (step, result)
척척박사님께 여쭤봐야겠다 ㅋ여기 뭐라는거임 진짜 개어렵네 아시는분 댓글좀

 

- Variable

<-> constant : 상수 - 변경 불가능, 변수를 할당할 수 x

constant 는 operation이나, Variable은 *class

-Variable은 class이므로 많은 operation을 지원함 (initializer, value, assign, assign_ad...)

-Variable 은 변수를 가지므로 업데이트 (변경) 이 가능하여 딥러닝의 weight 와 bias 변수를 선언할 때 사용됨

- 텐서플로우에서 Variable을 사용하기 전에 반드시 초기화 과정을 거쳐야 함

 

 

*class란? : 객체를 찍어내는 틀 !

붕어빵을 만들 때마다 붕어빵을 어떻게 만들지 연구하지 않는다. 붕어빵 틀이 있기 때문이다.

class란 객체를 태어나게 하는 틀이며, 이과정을 생성이라고 한다. 객체는 반드시 class를 통해 생성된다.

 

 

* 객체 : 속성과 기능을 갖추고 있는 것 (ex: 색상, 무게 = 속성 / 능력치 = 기능)

 

예를 들어 자전거라는 객체가 있다고 치자.

색상, 무게 등은 속성이고 주행가능거리, 속도 등은 기능이다.

그런데 이 자전거라는 객체 안에 또다른 객체가 있을 수 있다.

안장, 페달, 브레이크 등등

 

객체지향프로그래밍 : 안장,브레이크 등의 객체와 객체들을 도합해 자전거라는 커다란 하나의 프로그램을 만드는 것

 

Bike 클래스를 만드는 코드

 

출처 : https://blog.naver.com/drupal/221442982768

 

 

- PlaceHolder & Feed_dict

텐서플로우는 그래프 어셈블이 이루어진 후에 연산이 수행됨

그래프 어셈블 수행 시 입력값을 미리 정의해주면 Session을 수행할 때 데이터를 생성

placeholder 정의와 매개변수는 아래와 같음

 

-Dtype : placeholder의 데이터 타입을 지정하는 필수 매개변수

-Shape : placeholder의 값으로 사용할 텐서의 shape을 의미함

-Name : 해당 placeholder에 이름을 지정함

 

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

 

-세션을 수행할 때 feed_dict를 이용하여 placeholder값에 데이터를 입력

sess.run(optimizer, feed_dict={X:x, Y:y})

(dictionary data type)

 

 

'ML DL > TensorFlow 기초' 카테고리의 다른 글

Back-propagation  (0) 2021.07.03