C++ 기반 범용 오픈소스 딥러닝 프레임워크 WICWIU
▪️ 데이터 표현: Tensor, long array & shape class
▪️ 신경망 연산 표현: Operator, module class
▪️ 학습: loss function, optimizer class
▪️ 신경망 모델 표현: neural network class
multi-dimensional Tensor
최대 5차원의 Tensor 저장 가능
(time, batch, channel, feature map의 row, column)
host와 device memory의 메모리 동기화
Shape *m_aShape;
// Tensor를 구성하는 Shape 클래스, 텐서의 차원을 정의
LongArray<DTYPE> *m_aLongArray;
// Tensor를 구성하는 LongArray 클래스, data 저장
Device m_Device;
// 장치 사용 구분자, CPU 또는 GPU
int m_idOfDevice;
// GPU 사용 시, 사용하려는 GPU의 번호. CPU의 경우 -1
IsUseTime m_IsUseTime;
// time 축 사용 유무, IsUseTime 참고
enum Device {
CPU,
GPU,
};
enum IsUseTime {
UseTime,
NoUseTime
};
한 번에 할당하기 어려운 긴 배열을 표현하기 위해 정의한 클래스이다.
DTYPE **m_aaHostLongArray;
// 메모리에 올라가 있는 데이터의 주소 값.
int m_CapacityOfLongArray;
///< LongArray의 총 용량.
int m_TimeSize;
///< Tensor의 TimeSize
int m_CapacityPerTime;
///< Time으로 나누어진 data의 Capacity
Device m_Device;
//< 장치 사용 구분자 (CPU or GPU)
int m_idOfDevice;
///< GPU사용 시, 사용하려는 GPU의 번호.
▪️ Tensor의 차원 수와 차원의 길이를 표현하기 위한 클래스이다. (rank, length of each dimension)
▪️ 텐서는 내부적으로는 long array class를 이용하여 데이터를 1차원 array의 형태로 저장하고, 외부적으로는 shape class를 이용하여 1-5차원 구조의 인터페이스를 제공한다.
▪️ 신경망 구성을 위한 저수준 연산자를 표현하기 위한 추상 클래스
▪️ 모든 연산자 클래스의 base class이며, data와 gradient vector를 저장하기 위한 tensor 객체와 forward propagation 및 back propagation 함수를 갖는다.
▪️ 각 연산의 결과 ➡️ Tensor형 멤버 변수에 저장 (저장된 결과는 연결된 다른 operator나 loss function의 피연산자로 사용할 수 있다.
▪️ 신경망의 각 연산자는 operator 클래스를 상속받은 클래스로 정의된다.
▪️ WICWIU는 Tensorholder, Add, MatMul, ReLU, LReLU, PReLU, Sigmoid, Tanh, Convolution, Max-Pooling, Average-Pooling, Batch- Normalization, Concatenation등 CNN에서 자주 사용되는 연산들을 기본적으로 제공한다.
▪️ 이를 그래프로 연결하면 forward propagation 함수를 이용해 입력 벡터에 대한 출력을 계산할 수 있으며, Back propagation 함수를 통해 자동으로 경사도 벡터를 계산할 수 있다. (편리한 신경망 학습 가능)
▪️ 사용자가 operator class를 상속받아 새로운 연산자 정의 가능
1) 신경망 모델을 구성하는 모든 객체들을 저장하고 관리
▪️ 연산을 표현하는 연산자와 파라미터를 별도의 노드로 분리해서 표현함으로써 학습 과정에 optimizer의 동작을 단순하게 함
2) Operator와 Module로 구성된 신경망 모델의 계산 그래프를 분석하여 순전파 및 역전파 연산 순서를 결정
• 신경망을 구성하는 operator 및 module 객체들 간에는 서로 의존성이 존재하기 때문에 적절한 순서에 따라 연산을 수행해야 함
• WICWIU는 BFS 알고리즘을 이용해 순전파, 역전파 연산을 바르게 수행할 수 있는 연산 순서를 결정함
3) 학습된 파라미터 값을 binary 파일로 저장하고 불러오는 기능 제공
4) 모델의 학습을 위한 Train 함수와 검증 및 성능 평가를 위한 test 함수 제공
와~우~ 난 바보야 열심히 이해해야지
멋있어요 ㅠㅠ