CREAM은 텐서플로우(tensorflow) 형태로 제작된 AI학습 모델입니다. 텐서플로우처럼 완벽하진 않지만, 대부분을 학습할 수 있습니다. 현생에 치어사는 고딩(중딩때부터 시작해서)이 만들었기에 텐서플로우보다는 성능이 떨어질 수 있습니다
pip install pycream
XOR Algorithm은 XOR 교체 알고리즘이라고 불립니다. 각 입력에 대한 결과는 다음과 같습니다.
입력값 | 결과값 |
---|---|
0, 0 | 0 |
0, 1 | 1 |
1, 0 | 1 |
1, 1 | 0 |
위의 예시를 보면 알 수 있듯, 입력 값이 서로 다르면 1을, 같으면 0을 반환하는 것을 알 수 있습니다.
import cream
network = cream.network(lrate = 0.01)
위와 같이 기본적인 네트워크를 만들 수 있습니다. lrate인자를 변경함으로써 한 번에 얼마나 학습할 지 정해줄 수 있습니다. lrate는 int 및 float 형태를 받습니다. 너무 크거나 너무 작은 lrate는 학습에 방해가 됩니다.
# 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을 해 줄 필요가 없습니다.
CREAM 안에는 몇가지 예제들이 있습니다. 그중 XOR 데이터셋을 불러오도록 하겠습니다.
dataset = cream.dataset.XOR
다른 예제들로는 Reverse와 Half가 있습니다.
network.forward(input)
network.backward(target)
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: 학습 도중 현재의 오차값을 출력해줍니다
CREAM 내에 기본적으로 내장된 모듈입니다. 기능들로는 division, stop, error, clear, out이 있습니다.
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)
# +----------------------------+
cream.csys.stop(message:str="")
코드를 잠시 중지할 때에 사용되며, 에러를 고칠 때, 혹은 결과 값을 확인할 때 사용하면 유용합니다.
cream.csys.error(message:str="", name:str="Unknown")
코드에 에러가 발생했을 때에 사용할 수 있습니다. 콘솔에 붉은 글씨로 출력이 됩니다. 에러가 출력된 이후에는 확인을 위해 코드가 중지되며(stop()과 동일하게) 이후 코드가 종료됩니다. 다음 예제를 확인하세요.
import cream
cream.csys.error("Description", "Error Name(Title)")
# Error Occured (Error Name(Title)): Description
cream.csys.clear()
콘솔의 글씨들을 모두 지웁니다.
cream.csys.out(message, color, bold:bool=False,underline:bool=False)
기존의 무채색 print에 색을 넣거나, 두껍게 할 수 있습니다.