Coding/Python 삽질기2020. 8. 3. 22:33

아래와 같이 1개의 은닉층을 가진 신경망을 구성해 보았습니다.

 

import numpy as np

def sigmoid(x):
    return 1/(1+np.exp(-x))


def DeltaSGD(W1, W2, X, D):
    alpha = 0.9
    
    idx = 0
    for k in X:
        a1 = np.dot(W1, k)
        z1 = sigmoid(a1)
        
        a2 = np.dot(W2, z1)
        y = sigmoid(a2)
        
        e = D[idx] - y
        delta = y * (1-y) * e
        
        e1 = W2 * delta
        delta1 = z1 * (1-z1) * e1

        dw1 = alpha * delta1
        dw1 = dw1.reshape(4,1)
        x = k.reshape(1,3)
        W1 += np.dot(dw1, x)
        
        dw2 = alpha * delta * z1
        W2 += dw2
        idx+=1

        
def Train(epoch, x, y, W1, W2):
    for ep in range (epoch):
        DeltaSGD(W1, W2, x, y)

        
def main():
    W1 = np.random.randn(4,3)
    W2 = np.random.randn(4)
    x = np.array([[0, 0, 1], [0, 1, 1], [1, 0, 1], [1, 1, 1]])
    y = np.array([0, 1, 1, 0])
    trainCount = 10000

    print('---Before Training---')
    print(W1)
    print(W2)
    print('---After Training---')
    Train(trainCount, x, y, W1, W2)
    print(W1)
    print(W2)
    
    print('---Result---')
    for k in x:
        a1 = np.dot(W1, k)
        z1 = sigmoid(a1)
        
        a2 = np.dot(W2, z1)
        y = sigmoid(a2)
        print(y) 
        
        
if __name__ == '__main__':       
    main()        
---Before Training---
[[-0.82542712 -0.65157477  0.09131077]
 [-0.12367401  1.07601221 -1.43941252]
 [-1.00401084 -0.04547823  0.97194216]
 [ 0.02719329 -0.22932678 -0.45809196]]
[ 0.16840571 -0.55206913  1.75255171 -0.54203599]
---After Training---
[[-6.3608461  -6.35976778  2.71126418]
 [ 3.61918383  3.62562196 -5.65337702]
 [-3.70117648 -3.70158904  5.76910815]
 [-1.51981715 -1.56682777 -0.58710802]]
[-11.12882426  -6.71646542   6.50908732  -1.52377049]
---Result---
0.01083108954199271
0.9896067125952175
0.9895881791368779
0.01040259419256147

 

'Coding > Python 삽질기' 카테고리의 다른 글

[Pygame] Paper Plane Game 만들기  (0) 2020.08.25
[Python][AI] Perceptron 예제  (0) 2020.07.28
[Python] fisher-yates shuffle  (0) 2020.07.20
Posted by chobocho
Coding/Python 삽질기2020. 7. 28. 23:56

 

import numpy as np

def sigmoid(x):
    return 1/(1+np.exp(-x))


def DeltaSGD(W, X, D):
    alpha = 0.9
    dwSum = np.array([0] * 3)
    
    idx = 0
    for k in X:
        a1 = np.dot(k, W)
        y = sigmoid(a1)
        
        e = D[idx] - y
        delta = y * (1-y) * e
        
        dw = alpha * delta * k
        W += dw
        idx+=1

        
def Train(epoch, x, y, W1):
    for ep in range (epoch):
        DeltaSGD(W1, x, y)

        
def main():
    W1 = np.random.randn(3)
    x = np.array([[0, 0, 1], [0, 1, 1], [1, 1, 1], [1, 0, 0]])
    y = np.array([1, 1, 1, 0])

    Train(10000, x, y, W1)
    
    for k in x:
        a1 = np.dot(k, W1)
        z1 = sigmoid(a1)
        print(z1)    
        
        
if __name__ == '__main__':       
    main()  

 

0.9962960119369554
0.9999259998523653
0.9929612087250037
0.010332095384834877

'Coding > Python 삽질기' 카테고리의 다른 글

[Python][AI] XOR 예제  (0) 2020.08.03
[Python] fisher-yates shuffle  (0) 2020.07.20
강아지 나이 계산기  (0) 2020.07.16
Posted by chobocho
Coding/Python 삽질기2020. 7. 20. 23:27
import random

number = [1, 2, 3, 4, 5, 7, 8]

def shuffle(number):
   for i in range (len(number)-1, 0, -1):
       j = random.randint(0, i)
       number[j], number[i] = number[i], number[j]
    
shuffle(number)

 동작을 보면 아래와 같이 변화 한다

[1, 2, 3, 4, 5, 7, 8]
[1, 8, 3, 4, 5, 7, 2]
[1, 8, 3, 4, 5, 7, 2]
[1, 8, 3, 4, 5, 7, 2]
[1, 8, 3, 4, 5, 7, 2]
[3, 8, 1, 4, 5, 7, 2]
[3, 8, 1, 4, 5, 7, 2]

* 참고: https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle

'Coding > Python 삽질기' 카테고리의 다른 글

[Python][AI] Perceptron 예제  (0) 2020.07.28
강아지 나이 계산기  (0) 2020.07.16
[Python] 소인수 분해  (0) 2020.07.10
Posted by chobocho
Coding/Python 삽질기2020. 7. 16. 00:19

강아지 나이를 인간 나이로 바꿔주면 위와 같은 그래프가 나온다고 한다.

강아지 나이 와 인간 나이 변환표

소스코드: https://github.com/chobocho/dog_age

'Coding > Python 삽질기' 카테고리의 다른 글

[Python] fisher-yates shuffle  (0) 2020.07.20
[Python] 소인수 분해  (0) 2020.07.10
[ChoboTimer] Version 0.17 Release  (0) 2020.04.22
Posted by chobocho
Coding/Python 삽질기2020. 7. 10. 00:07
import math

def get_prime_factor(number):
    result = []

    if number < 2:
        return result

    while number % 2 == 0:
        result.append('2')
        number /= 2

    for i in range (3, int(math.sqrt(number)) + 1, 2):
        if number % i == 0:
            result.append(str(i))
            number /= i

    if number > 2:
        result.append(str(int(number)))

    return result

def testPrimeFactor():
    assert len(get_prime_factor(-1)) == 0
    assert "2x2x3" == 'x'.join(get_prime_factor(12))
    assert "2x2x5x5" == 'x'.join(get_prime_factor(100))
    assert "67x337x2797x14251" == 'x'.join(get_prime_factor(900000001213))

if __name__ == '__main__':
    testPrimeFactor()

'Coding > Python 삽질기' 카테고리의 다른 글

강아지 나이 계산기  (0) 2020.07.16
[ChoboTimer] Version 0.17 Release  (0) 2020.04.22
[Python] venv 사용  (0) 2020.04.15
Posted by chobocho
Coding/Java 삽질기2020. 5. 14. 08:54

자연스러운 카드 이동 화면 구현

카드를 마우스로 드래그 하여 이동할 경우, 드래그를 시작한 마우스의 좌표(smx, smy) 와

카드의 좌측 상단 포인트 (scx, scy)에서 가로, 세로 차이 W (scx - smx), H (scy - smy)를 구합니다.

그리고 마우스를 드래그 하는 동안 마우스 커서 위치에 카드를 그려야하는데,

현재의 마우스 좌표 (mx, my) 에서 위 에서 구한 W, H 의 거리만큰 이동한

(cx = mx - W, cy = my - H)를 시작 점으로 하여 카드 이미지를 그려주면,

자연스러운 카드 이동 화면을 구현 할 수 있습니다.  

 

참고소스:

https://github.com/chobocho/solitaire/commit/cf83dcc10c0c890aaf0cda1f73323a33f7092d87

Posted by chobocho
Coding/Python 삽질기2020. 4. 22. 23:28

ChoboTimer V0.17 으로 업데이트 하였습니다. 

* 타이머에 메모를 넣을수 있도록 수정하였습니다.

chobotimer_td2.zip
8.66MB

ChoboTimer에 대한 자세한 내용은 아래 링크를 참고하세요.

https://chobocho.tistory.com/2461431

'Coding > Python 삽질기' 카테고리의 다른 글

[Python] 소인수 분해  (0) 2020.07.10
[Python] venv 사용  (0) 2020.04.15
[ChoboTimer] 타이머 앱 만들기  (0) 2020.02.29
Posted by chobocho
Coding/Python 삽질기2020. 4. 15. 19:03
// 만들기
python -m venv ./snake_game

// 실행
cd \snake_env\Scripts
activate.bat

// 종료하기
deactivate.bat

'Coding > Python 삽질기' 카테고리의 다른 글

[ChoboTimer] Version 0.17 Release  (0) 2020.04.22
[ChoboTimer] 타이머 앱 만들기  (0) 2020.02.29
Minim / 간단한 메모관리 툴 (TK3)  (0) 2020.01.16
Posted by chobocho
Coding/Tip2020. 4. 13. 22:51

Android studio에 있는 유용한 기능을 공유해 봅니다.

1. Alt + 2 : Favorites 표시

자주 참고하는 파일들을 모아서 관리 할 수 있다

 

2. F11 : Bookmark

   Shift + F11 : 모든 Bookmark 표시

 

'Coding > Tip' 카테고리의 다른 글

[Sheet] 구글 스프레드 시트 단축키  (0) 2021.10.16
사무직을 위한 Git 활용 법  (0) 2018.10.27
[GIT] 특정 폴더만 받아오기  (0) 2017.07.22
Posted by chobocho
Coding/Java 삽질기2020. 4. 12. 01:18

몇 년 전에 만들었던, 마작 게임을 껍데기만 빼고 다 바꿔 보았다.

PlayStore:  https://play.google.com/store/apps/details?id=com.chobocho.ColorMatch

Source code: https://github.com/chobocho/ImageMatch

마작 게임 스크린 샷

 

1. 전체 패키지 구조는 아래와 같다

간단한 패키지 구조도

 

2. 이중 마작게임의 State diagram은 아래와 같이 구상 했다.

스테이트 다이어그램

 

3. 그리고 아래와 같이 Class diagram 을 작성했다.

 

Posted by chobocho