Gradient Descent


Gradient Descent 알고리즘을 enuSpace-Tensorflow를 이용하여 실행 결과입니다.


enuSpace-Tensorflow는 C++ 기반의 API를 이용하여 그래픽 블럭으로 구성되었습니다. Tensorflow의 C++ API를 이용하여 구현하시는 분은 아래링크를 참고하세요.

API 가이드 : https://expnuni.gitbooks.io/enuspacetensorflow/content/


참고 : https://hunkim.github.io/ml/ (모두를 위한 머신러닝/딥러닝 강의)

참고 : https://medium.com/@peteryun/ml-%EB%AA%A8%EB%91%90%EB%A5%BC-%EC%9C%84%ED%95%9C-tensorflow-3-gradient-descent-algorithm-%EA%B8%B0%EB%B3%B8-c0688208fc59

Python를 이용한 구현

import tensorflow as tf

x_data = [1., 2., 3.]
y_data = [1., 2., 3.]

W = tf.Variable(tf.random_uniform([1],-10.0, 10.0))

X = tf.placeholder(tf.float32)
Y = tf.placeholder(tf.float32)

hyphothesis = W * X

cost = tf.reduce_mean(tf.square(hyphothesis - Y))

descent = W - tf.mul( 0.1, tf.reduce_mean(tf.mul( (tf.mul(W,X)-Y), X ) ))

init = tf.initialize_all_variables()

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

for step in range(20):
    sess.run(W.assign(descent), feed_dict={X:x_data, Y:y_data})
    print( step, sess.run(cost, feed_dict={X:x_data, Y:y_data}), sess.run(W))

enuSpace-Tensorflow를 이용한 구현

Tensorflow의 그래픽 컴포넌트를 이용하여 위와 동일한 코드를 그래픽 컴포넌트를 이용하여 로직을 구성하여 실행한 결과는 아래 그림과 같다. 

X의 초기값에 {1.0f, 2.0f, 3.0f} 입력시 출력 Y {1.0f, 2.0f, 3.0f}에 해당하는 W값을 구현하는 로직이다.

자세한 알고리즘에 대한 설명은 https://hunkim.github.io/ml/ (모두를 위한 머신러닝/딥러닝 강의)를 참고하시기 바랍니다.

ApplyGradientDescent 블럭을 이용한 구현 예시

ApplyGradientDescent Equation (var = var - alpha*delta)


Multi Variable Linear regression 구현 예시

아래의 테이블의 값을 이용하여 W, b의 찾기 위한 그래픽 블럭을 구성하여 예상된 가중치와 바이어스값을 확인.

X1X2X3Y
152179
151222110
351323135
44524171
51553199
6447120
121727132
62028135

미리계산된 W, Bias 값 (W1 = 1, W2 = 2, W3= 3, Bias = 5)

Hypothesis Using matrix

H(x1, x2, x3) = x1w1 + x2w2 + x3w3

Multi variable Python 코드 구현예시

x_data = [[1., 5., 21.], [15., 12., 22.],
         [35., 13., 23.], [4., 45., 24.], [5., 15., 53.],
         [6., 44., 7.], [12., 17., 27.], [6., 20., 28.]]
y_data = [[79.], [110.], [135.], [171.], [199.], [120.], [132.], [135.]]


# placeholders for a tensor that will be always fed.
X = tf.placeholder(tf.float32, shape=[None, 3])
Y = tf.placeholder(tf.float32, shape=[None, 1])

W = tf.Variable(tf.random_normal([3, 1]), name='weight')
b = tf.Variable(tf.random_normal([1]), name='bias')

# Hypothesis
hypothesis = tf.matmul(X, W) + b

그랙픽 블럭 구성 및 실행 결과


W1, W2, W3의 값이 1, 2, 3의 값으로 수렴, Bias 값 5로 수렴

초기값 설정

X = {{1,5,21},{15,12,22},{35,13,23},{4,45,24},{5,15,53},{6,44,7},{12,17,27},{6,20,28}}

Y = {{79 },{110},{135},{171},{199},{120},{132},{135}}

W 초기값 = {{1.5,3.5,0.5}}

b 초기값 = {{0.5}}

ApplyGradientDescent alpha 값 = 0.001



enuSpace professional 2016 기준

enuSpace 그래픽 저작기 에디트 박스 객체(Edit box Object)


그래픽 편집기에서 Edit Box Object 생성 방법은 아래와 같다.


1. Edit Box Object를 생성할 Picture를 선택한다.

2. 그래픽 편집기 상단의 메뉴에서 “Edit Box” 버튼을 클릭한다.

3. “Edit Box” 버튼을 클릭하고 선택한 Picture에서 원하는 위치 및 길이만큼 마우스로 드래그하여 Edit Box Object를 생성한다.

4. “Input the Text”라는 초기 텍스트를 가진 Edit Box Object를 생성되면 “Input the Text” 영역을 마우스로 클릭하면 “Input the Text”는 사라지고 커서가 표시되고 Text를 입력한다.

5. 생성된 Edit Box Object는 그래픽 편집기 오른쪽에 위치한 “Property Window” 에서 설정한다.


아래 그림은 Edit Box Object 생성 및 속성 설정 방법을 나타낸다.




아래 표는 Edit Box Object의 Property 항목 및 기능에 대한 설명을 나타낸다.


분류

항목

기능

Property

id

고유 식별자 설정

visibility

화면 표시 여부 설정

lock

편집 모드 시 선택 여부 설정

Brush

fill

객체의 면 색상 채우기 설정

fill-opacity

면 색상 투명도 설정

Pen

stoke

외곽선 색상 설정

stoke-opacity

외곽선 투명도 설정

불투명 : 1.0 투명 : 0.0

stoke-width

외곽선 두께 설정

stoke-linecap

외곽선 끝 모양 설정

stoke-linejoin

외곽선의 꼭지점 모양 설정

stoke-dasharray

외곽선 패턴 설정

패턴 입력의 구분자는 ‘ , ’이고 첫 패턴은 실선 두 번째는 공백의 순으로 반복

Layout

x

객체 그리는 x 좌표 설정

y

객체의 그리는 y 좌표 설정

width

넓이 값 설정

height

높이 값 설정

Transform

translate-x

원점으로부터 이동한 거리 X 좌표 설정

translate-y

원점으로부터 이동한 거리 Y 좌표 설정

rotate

회전 값 설정

scale-x

크기 변경 X 좌표 설정

scale-y

크기 변경 Y 좌표 설정

center-x

센터 포인터의 X 설정

center-y

센터 포인터의 Y 설정

Style & Class

Style

외부 스타일 정의

class

내부 스타일 정의

Edit Box

font-family

글자 모양 설정

font-size

글자 크기 설정

font-style

글자 스타일 설정 (normal, italic, oblique)

font-weight

글자 가중치 설정 (normal, bold, bolder )

text

글자 삽입 내용 설정

text-color

글자 색 설정

disabled

글자 입력 제한 여부 설정

multiline

두 줄 이상 입력 여부 설정

password

패스워드 형식으로 표시 설정

read-only

읽기 전용 설정

want-return

Enter 입력 설정 여부

text-align

글자 좌우 정렬 설정

border

Edit Box 테두리 설정

number

숫자만 입력 설정

lowercase

소문자 입력 표시 설정

uppercase

대문자 입력 표시 설정

static-edge

그림자 표시 여부 설정

auto-scroll

자동 스크롤 설정

horizontal-scroll

가로 스크롤 설정

vertical-scroll

세로 스크롤 설정


+ Recent posts