[deep learning 학습 노트] Yusugomori의 SDA 코드인 Sda를 주석합니다.cpp - 모델 테스트
4
void test_sda()
{
srand(0);
double pretrain_lr = 0.1;
double corruption_level = 0.3;
int pretraining_epochs = 1000;
double finetune_lr = 0.1;
int finetune_epochs = 500;
int train_N = 10;
int test_N = 4;
int n_ins = 28;
int n_outs = 2;
int hidden_layer_sizes[] = {15, 15};
int n_layers = sizeof(hidden_layer_sizes) / sizeof(hidden_layer_sizes[0]);
// training data
int train_X[10][28] = {
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1}
};
int train_Y[10][2] = {
{1, 0},
{1, 0},
{1, 0},
{1, 0},
{1, 0},
{0, 1},
{0, 1},
{0, 1},
{0, 1},
{0, 1}
};
// construct SdA
SdA sda(train_N, n_ins, hidden_layer_sizes, n_outs, n_layers);
// pretrain
sda.pretrain(*train_X, pretrain_lr, corruption_level, pretraining_epochs);
// finetune
sda.finetune(*train_X, *train_Y, finetune_lr, finetune_epochs);
// test data
int test_X[4][28] = {
{1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1}
};
// double test_Y[4][28]; // bug!!
double test_Y[4][2]; // there are only two possible labels for each test sample
// test
for(int i=0; i<test_N; i++)
{
sda.predict(test_X[i], test_Y[i]);
for(int j=0; j<n_outs; j++)
{
printf("%.5f ", test_Y[i][j]);
}
cout << endl;
}
}
int main()
{
test_sda();
getchar();
return 0;
}
모형은 먼저 훈련집으로 훈련한 다음에 테스트 집합을 제시하고 테스트 집합의 label 확률을 예측할 수 있다.그 사이에 또 하나의 버그가 바뀌었지만, 이 버그는 품위를 손상시키지 않았다.훈련 집합과 대응하는 라벨을 관찰한 결과 Sample을 입력하는 벡터 중 앞부분이'1'이 많으면 첫 번째 라벨이'1'일 가능성이 높다.그렇지 않으면 뒷꼬리표가'1'일 가능성이 높다.실행 결과:
predict 함수에 있는 버그가 바뀌지 않았다면 (이전 블로그 참조) 결과는 다음과 같습니다.
0.34653 0.65347 0.34632 0.65368 0.18838 0.81162 0.28590 0.71410
predict 함수에 있는 버그가 현재 작성한 대로 수정되면 실행 결과는 다음과 같습니다.
0.99194 0.00806 0.99194 0.00806 0.00853 0.99147 0.00853 0.99147
뒤에 있는 이 조의 수가 좀 더 보기 좋다. 어쨌든 두 종류의 차이는 더욱 벌어졌다.
그러나 원본 프로그램을 실행할 때 버그가 발생하고 윈도우즈에 세그먼트 오류가 발생하면 메모리를 쓸 때test 를 예상할 수 있습니다sda 함수의 호출 창고가 파괴되었습니다.당분간 어딘지 못 찾았어요.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.