본문 바로가기

Programming/Python

함수와 뉴런, 인공신경망의 구현

반응형

함수란?

 

$$F(u,v)=\left ( \frac{2}{N}\right)^{{\frac{1}{2}}}\left ( \frac{2}{M} \right )^{{\frac{1}{2}}}\sum_{i=0}^{N-1}\sum_{j=0}^{M-1}\Lambda (i).\Lambda(j).cos\begin{bmatrix}
\frac{\pi .u}{2.N}(2i+1)\end{bmatrix}cos\begin{bmatrix}
\frac{\pi .u}{2.M}(2j+1)\end{bmatrix}.f(i,j)$$

 

 

이산 코사인 변환함수라는 것이다.

 

이산 코사인 변환함수를 이용한 압축

이 함수를 통해서 큰 이미지나 영상을 압축해서 작은 크기로 변환하고 다시 복원하는 것을 할 수가 있다. 과거에 과학자들이 만든 이 함수를 통해서 오늘날에 이르러서 잘 활용하고 있는 것이다.

 

 

 

함수라는 것은 이렇듯, 자연현상을 수학적으로 모델링해서 적용할 수 있는 수학이론이라고 할 수 있다.

 

 

머신러닝도 함수다.

기계가 스스로 학습해서 어떤 결과물을 내도록 하는 것도 함수다. 예컨데 다양한 이미지 중에서 고양이를 찾게 하기 위해서는 고양이에 대해 묘사한 내용을 함수로 정의해야 한.

 

이것이 가능하려면 많은 자료가 필요하다.

 

 

뉴론과 신경망

뇌의 뉴론은 850억개 정도로 구성되어 있고, 뇌의 기본단위이다.

 

이런 뉴런이 연결된 망을 신경망이라고 한다. 사람의 뇌에서 뉴런을 서로 연결하는 시냅스의 수는 100조개나 된다.

 

뉴런은 일종의 작은 연산자와 같다는 것을 발견했다. 

 

 

인공신경망을 만든다는 것은 무슨 뜻일까?

함수를 짓는다는 뜻이다. 

아래와 같은 함수를 만든다고 가정해보자.

 

  • MileToKm : 마일을 Km로 변환해주는 함수
    $$input\; x \to f_x=1.61x\to\;output\;y=f(x)$$
  • plotMileToKm : MileToKm 함수의 결과를 시각화해주는 함수

 

# 함수(인공뉴런) 만들기

import matplotlib.pyplot as plt
%matplotlib inline

def mileToKm(x):
    """
    x -- 마일을 킬로미터로 변환하여 반환함.
    """
    return 1.61*x

def plotMileToKm(x,y):
    plt.figure()
    plt.plot(x,y)
    plt.title("Mile to Km")
    plt.xlabel("Mile",fontsize=20)
    plt.ylabel("Km",fontsize=20)
    plt.show()

 

for 문 계산

# for 문을 사용한 계산
for mile in range(0,5):
    print('{}mi:{}km'.
         format(mile, mileToKm(mile)))

시각화

# 함수 결과의 시각화
x=[0,1,2,3,4]
y =[0,1.61,3.22,4.83,6.44]

plotMileToKm(x,y)

plotMileToKm(x,y) 함수에서 plt.plot(x, y)를 plt.plot(x, y, "ob") 로 바꾸면, 아래와 같은 그래프를 얻을 수 있다.

 

o는 점, b는 블루를 뜻한다.

ob를 -sr 로 변경하면 아래와 같이 점들을 선으로 연결한 그래프를 얻을 수 있다.

 

-는 점들을 선으로 잇는다는 뜻, s는 Square(네모), r은 레드다.

 

 

pythonic한 코딩을 하자.

위와 같이 구현만 해도 좋지만, 여기서 얻은 값은 직접 타이핑해서 얻은 값이기 때문에 전혀 자동화가 되어 있지 않다. 이러한 수고를 줄이기 위해서, 리스트 데이터를 arange 를 통해서 쉽게 만들 수 있다.

 

  • range(start, end, step)
    range(0, 5) = [0, 1, 2, 3, 4] 마지막 최종점인 5는 표시하지 않는다.

 

1. for문의 활용

y = [] # y값 초기화
for mile in range(0,5): # for문으로 range 0~5까지 작업하기
    y.append(mileToKm(mile)) # 리스트 클래스 매소드인 append로 y에 값 더하기

# for문이 끝나면 y 리스트가 완성되는 원리
    
print(y)

 

 

2. list comprehension을 통한 리스트 만들기

 for 문의 간결한 버전이라고 할 수 있다.

 

# list comprehension으로 리스트 만들기
# list comprehension에서는 for문의 결과가 자동적으로 저장된다.
y = [mileToKm(mile) for mile in range(0,10)]
     
print(y)

 

3. Numpy를 통한 간결한 코딩

# numpy로 리스트 만들기
import numpy as np

y = np.array(np.arange(0,100))

print(y)

 

# numpy 사용 이점 : 코드가 훨씬 짧아진다.
# pythonic 하다.

x = np.arange(0,20)
y = mileToKm(x)

print(x)
print(y)
plotMileToKm(x,y)

이런 것을 두고 pythonic한 코딩, 클린코딩했다고 한다. 짧지만 효과적으로.

반응형

'Programming > Python' 카테고리의 다른 글

numpy 브로드캐스팅  (0) 2022.01.14
Numpy 튜토리얼  (0) 2022.01.14
파이썬 Numpy 다차원 배열  (0) 2022.01.06
파이썬 NumPy 데이터타입  (0) 2022.01.06
파이썬 NumPy 라이브러리 장점  (0) 2022.01.06