Skip to content
/ CREAM Public

Deep Learning Engine. (If you want to use CUDA, you can use CREAM-CUDA)

Notifications You must be signed in to change notification settings

mangto/CREAM

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 

Repository files navigation

CREAM

CREAM은 텐서플로우(tensorflow) 형태로 제작된 AI학습 모델입니다. 텐서플로우처럼 완벽하진 않지만, 대부분을 학습할 수 있습니다. 현생에 치어사는 고딩(중딩때부터 시작해서)이 만들었기에 텐서플로우보다는 성능이 떨어질 수 있습니다

Install

pip install pycream

XOR Algorithm 예제

XOR Algorithm이란?

XOR Algorithm은 XOR 교체 알고리즘이라고 불립니다. 각 입력에 대한 결과는 다음과 같습니다.

입력값 결과값
0, 0 0
0, 1 1
1, 0 1
1, 1 0

위의 예시를 보면 알 수 있듯, 입력 값이 서로 다르면 1을, 같으면 0을 반환하는 것을 알 수 있습니다.

CREAM 불러오기

import cream

네트워크 만들기 (Generate Netowrk)

network = cream.network(lrate = 0.01)

위와 같이 기본적인 네트워크를 만들 수 있습니다. lrate인자를 변경함으로써 한 번에 얼마나 학습할 지 정해줄 수 있습니다. lrate는 int 및 float 형태를 받습니다. 너무 크거나 너무 작은 lrate는 학습에 방해가 됩니다.

레이어 추가 및 Compile (Add Layer & Compile)

# network.add(Layer) -> None
# cream.layer.Dense(size:int, activation=None, InputShape:int=None)

network.add(cream.layer.Dense(5, cream.functions.ReLU, InputShape=2))
network.add(cream.layer.Dense(1, cream.functions.ReLU))
network.compile()

Dense 레이어는 가장 기본적인 네트워크 형태입니다. 뉴런들의 집합을 의미합니다. network.add()을 통해 레이어를 추가할 수 있으며, 가장 첫 레이어에는 인풋 쉐입을 넣어주어야 합니다.

  • size: 한 레이어 안의 뉴런 개수를 말하며, 정수형을 받습니다.
  • activation: activation function이라고도 부르며, sigmoid, ReLU, Leaky_ReLU 등이 있습니다.
  • InputShape: 첫 레이어에 넣어주는 인자로, 네트워크의 인풋 뉴런 개수를 정합니다.

network.compile()은 네트워크를 완성시켜주는 것으로, 네트워크 사용을 위해서는 꼭 필요합니다

network = cream.generator.sequence([
    cream.layer.Dense(5, cream.functions.ReLU, InputShape=2),
    cream.layer.Dense(1, cream.functions.ReLU)
])

위처럼 generator의 sequence 함수로도 네트워크를 형성할 수 있습니다. 이의 경우에는 compile이 자동으로 되기 때문에, 따로 해줄 필요가 없습니다.

network = cream.generator.shape([2, 5, 1], cream.functions.ReLU)

네트워킈 레이어로 dense만 쓸 경우에는 위처럼 generator의 shape 함수를 통해 네트워크를 간단하게 만들 수 있습니다. 이 경우 또한 compile을 해 줄 필요가 없습니다.

데이터셋 불러오기 (Load dataset)

CREAM 안에는 몇가지 예제들이 있습니다. 그중 XOR 데이터셋을 불러오도록 하겠습니다.

dataset = cream.dataset.XOR

다른 예제들로는 Reverse와 Half가 있습니다.

네트워크 사용하기 (Network Forward)

network.forward(input)

역전파 학습 (Backpropagation)

network.backward(target)

학습시키기 (Training)

network.fit(inputs: list | numpy.ndarray, targets: list | numpy.ndarray,
        MinError:int=None, MaxEpoch:int=None,
        ForwardFunction=None, LearningFunction=None,
        advise=True)

위와 같이 네트워크의 forward와 backpropagation을 반복하며 학습시킬 수 있습니다. CREAM에는 csys라는 모듈이 포함되어 있스며, 학습에 필요한 기능이 포함되어 있습니다. 이에 대해 밑에서 다시 설명하도록 하겠습니다.

  • inputs: 데이터셋의 인풋값을 의미합니다
  • targets: 네트워크의 forward 결과로 나와야 하는 결과를 말합니다
  • MinError: 모델이 목표로 하는 오차값입니다
  • MaxEpoch: 최대 학습할 횟수를 말합니다
  • ForwardFunction: 정방향 진행(입력으로 결과 도출)을 해주는 함수를 말합니다
    • 기본값: network.forward()
  • LearningFunction: 역전파 함수를 말합니다
    • 기본값: network.backward()
  • advise: 학습 도중 현재의 오차값을 출력해줍니다

CSYS

CREAM 내에 기본적으로 내장된 모듈입니다. 기능들로는 division, stop, error, clear, out이 있습니다.

division()

cream.csys.division(length:int, Return=False)

콘솔(console)에 출력을 할 때에 공간 분리를 해주기 위함입니다. length는 4 이상의 정수열을 받습니다. Return 인자를 True로 변경하면 변수에 저장할 수 있습니다. 다음 예시를 참고하시기 바랍니다.

import cream

cream.csys.division(30)
# +----------------------------+

division = cream.csys.division(30, True)
print(division)
# +----------------------------+

stop()

cream.csys.stop(message:str="")

코드를 잠시 중지할 때에 사용되며, 에러를 고칠 때, 혹은 결과 값을 확인할 때 사용하면 유용합니다.

error()

cream.csys.error(message:str="", name:str="Unknown")

코드에 에러가 발생했을 때에 사용할 수 있습니다. 콘솔에 붉은 글씨로 출력이 됩니다. 에러가 출력된 이후에는 확인을 위해 코드가 중지되며(stop()과 동일하게) 이후 코드가 종료됩니다. 다음 예제를 확인하세요.

import cream

cream.csys.error("Description", "Error Name(Title)")
# Error Occured (Error Name(Title)): Description

clear()

cream.csys.clear()

콘솔의 글씨들을 모두 지웁니다.

out()

cream.csys.out(message, color, bold:bool=False,underline:bool=False)

기존의 무채색 print에 색을 넣거나, 두껍게 할 수 있습니다.

IDEA

alt text alt text alt text

found rule

alt text

About

Deep Learning Engine. (If you want to use CUDA, you can use CREAM-CUDA)

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages