홈페이지 : https://nnstudio.io/
데모 영상 : https://www.youtube.com/watch?v=to0KIZwbYeQ
-
데이터 셋 : 데이터 학습을 위한 데이터들의 집합입니다. 공공 데이터라고 생각하시면 됩니다. csv나 image의 zip파일로 구성되어 있습니다. 데이터의 정보는 프로젝트 데이터 셋 설정 페이지에서 확인할 수 있으며, 상단 100개의 데이터를 확인할 수 있습니다.
-
데이터 스토어 : 데이터 셋을 자신의 라이브러리에 추가 및 삭제 혹은 자신의 데이터 셋을 공유할 수 있는 페이지입니다.
-
대시보드 : 자신의 프로젝트가 있는 공간입니다. 이 페이지에서 사용자는 프로젝트를 생성 및 삭제를 할 수 있습니다.
-
프로젝트 : 모델을 만들 수 있는 공간입니다. 사용자는 모델을 만들어 파이썬 코드를 추출하거나 학습시킬 수 있습니다.
-
프로젝트 데이터 셋 설정 : 데이터 셋에 대한 설정으로, 데이터셋의 Shuffle, label, 정규화등을 설정할 수 있습니다.
-
프로젝트 설정 : 모델에 대한 설정입니다. Epoch, Batch Size, Loss와 자신이 만든 데이터 셋 설정의 종류를 선택할 수 있습니다.
프로젝트의 이름과 설명을 작성하고 프로젝트 생성 버튼을 누릅니다.
먼저 왼쪽 상단에 Layer 버튼을 눌러 어떤 노드가 있는지 확인해보세요. Conv2D, Dense 등 Layer층에 해당한 노드들이 있습니다.
위 그림은 이제 만들어 볼 모델입니다.
Conv2D노드를 드래그하여 그래프 판 위에 올려 놓습니다. 그리고 먼저 생성된 inputNode의 아래 점을 드래그 하여 Conv2D의 위의 검은 점에 연결해보세요. 다음과 같이 연결되었으면 성공입니다.
노드를 삭제하는 방법은 노드 클릭후 ESC 버튼을 눌러주세요. 엣지를 삭제하는 방법은 엣지의 끝 부분을 선택 한뒤 ESC 버튼을 눌러주세요.
연결 후 Conv2D의 노드를 클릭하시고 왼쪽 하단을 보시면 노드에 대한 설정을 변경할 수 있습니다. 맨위의 TYPE은 어떤 노드인지 확인할 수 있습니다. label은 노드의 이름입니다. 추후에 파이썬 코드로 변경될 때 이 이름이 하나의 변수가 됩니다. 다음과 같이 설정해주세요.
BatchNormalization노드를 드래그하여 그래프 판 위에 올려 놓습니다. 위 그림과 같이 설정한뒤 Conv2D 엣지와 연결해주세요.
아래 사진 순서대로 노드를 만들어 주시고 값을 설정하고, 엣지를 차례대로 연결 해주세요.
아래와 같이 그래프가 완성되었나요?
마지막으로 inputNode를 선택해 다음과 같이 설정해줍니다.
변환 시키기 전에 저장 버튼을 눌러 줍시다. 이제 한번 파이썬 코드로 변환시켜봅니다. 노드를 드래그하는 컴포넌트 위에 보면 파이썬 코드로 내보내기라는 버튼이 있습니다. 버튼을 누르면 변환된 파이썬코드를 얻을 수 있습니다. 변환이 잘 되었으면 다음과 같은 코드를 얻을 수 있습니다.
페이지 접속후 왼쪽의 + 버튼을 누르면 다음과 같이 데이터 설정 셋 하나가 생성됩니다. 생성된 데이터 설정 셋을 클릭해주세요.
사용자는 여기서 자신의 데이터 셋 라이브러리에서 하나를 가져와 그 데이터셋에 대한 설정을 할 수 있습니다.
데이터 셋 이름은 원하시는 걸로 입력해주세요. 여기서는 Example로 하겠습니다.
데이터에는 MNIST값을 선택해주시고, Shuffle을 Check, 정규화는 Image로 레이블은 label 선택해주세요.
설정이 완료되면 저장 버튼을 눌러주세요.
데이터 셋 설정 생성이 완료되면 다음 과 같은 메시지가 생성됩니다.
프로젝트 설정 페이지에서는 자신의 프로젝트에 관한 전반적인 설정을 할 수 있습니다.
데이터 셋 설정값을 아까전에 만들었던 데이터 셋 설정 이름으로 선택해봅시다.
저는 아까전 Example을 이름으로 데이터 셋 설정을 만들었으니 Example을 선택하겠습니다.
설정이 완료되면 저장 버튼을 눌러 프로젝트 설정을 저장해주세요.
이제 모델 학습 버튼을 눌러 학습을 해봅니다. 학습 성공 메시지가 나타나면 학습 기록 페이지에 접속합니다.
학습 요청이 성공 후 학습 기록 페이지에는 학습 결과 1개가 존재할 것입니다.
만약에 없다면 학습이 실패한 것이니, 데이터 셋 설정이나 프로젝트 설정, 그래프를 다시 한번 확인해주세요.
현재 페이지에서 이 학습결과를 보고 있으면 지속적으로 서버와 통신을 하여 Epoch단위로 학습 결과를 그래프와 로그로 보여줍니다. 2분에서 3분정도 기다려주세요.
그래프가 잘 그려졌나요?
학습이 완료되면 새로고침을 해주세요. 이제 모델을 다운로드 받을 수 있습니다. 학습 결과에서 더보기를 클릭하시면 모델을 내려받을 수 있는 버튼이 있습니다.
편집 페이지에서 저장 버튼 옆에 공유 이미지를 클릭하면 공유 화면으로 접속할 수 있습니다. url 링크를 복사하여 친구들에게 보내보세요.
정확한 제약조건을 확인하기 위해서는 위의 링크를 따라가서 직접 코드를 보면 좋을 것 같다.
정확한 그래프를 만들기 위해 타입이나 엣지 (Dense, Input) 등에 대한 조건을 명시한다.
- BlockLimit는 각 블록 타입에 대한 갯수를 명시한다.
import { BlockType } from '../../../reactFlow/block/BlockType';
const UNIQUE = 1;
const INFINITY = 100;
type MAXIMUM_NUMBER_PER_BLOCK_TYPE_AT_GRAPH_KEY = keyof typeof BlockType;
export const MAXIMUM_NUMBER_PER_BLOCK_TYPE_AT_GRAPH: {
[K in MAXIMUM_NUMBER_PER_BLOCK_TYPE_AT_GRAPH_KEY]: number;
} = {
Activation: INFINITY,
AveragePooling2D: INFINITY,
BatchNormalization: INFINITY,
Conv2D: INFINITY,
Dropout: INFINITY,
Flatten: INFINITY,
MaxPool2D: INFINITY,
Dense: INFINITY,
Input: UNIQUE,
Rescaling: INFINITY,
Reshape: INFINITY,
Abs: INFINITY,
Ceil: INFINITY,
Floor: INFINITY,
Round: INFINITY,
Sqrt: INFINITY,
Add: INFINITY,
Subtract: INFINITY,
Log: INFINITY,
};
위의 코드로 블록 타입에 대한 갯수를 제한했다.
- EdgeLimit는 각 블록타입에 연결 가능한 Edge를 명시한다. 이는 블록에 들어가는 입구와 출구 따로 명시한다.
- BlockRelationShip은 연결 가능한 블록 타입들을 명시한다.
const BlockRelationShip: {
[K in BlockRelationShipKey]: Set<BlockType>;
} = {
Activation: new Set([
BlockType.Conv2D,
BlockType.Activation,
BlockType.AveragePooling2D,
BlockType.Dense,
BlockType.Dropout,
BlockType.BatchNormalization,
BlockType.Flatten,
BlockType.MaxPool2D,
BlockType.Rescaling,
BlockType.Reshape,
BlockType.Abs,
BlockType.Ceil,
BlockType.Floor,
BlockType.Round,
BlockType.Sqrt,
BlockType.Add,
BlockType.Subtract,
BlockType.Log,
]),
위의 예제는 Activation이 연결할 수 있는 블록들을 명시한 코드이다.