Tensor의 LongArray의 Element들 중 가장 큰 다섯 개 값에 대한 인덱스를 계산해 반환하는 메소드이다.
@param data 탐색하고자 하는 Tensor @param ba Tensor의 batch Size @param ti Tensor의 Time Size @param numOfClass Tensor의 LongArray의 Element 개수 @return 매개변수로 전달받은 Tensor의 LongArray의 Element들 중 가장 큰 다섯 개 값에 대한 인덱스
template<typename DTYPE> void NeuralNetwork<DTYPE>::GetTop5Index(Tensor<DTYPE> *data, int *top5Index, int ba, int ti, int numOfClass) {
Shape *pShape = data->GetShape();
int start = Index5D(pShape, ti, ba, 0, 0, 0);
int end = start + numOfClass;
// Initialize array with 0
DTYPE top5Value[5] = { 0, };
// Find 5 top elements
for (int dim = start; dim < end; dim++) {
// printf("(*data)(%d) = %f, top5Value[0] = %f\n", dim, (float)(*data)[dim], (float)top5Value[0]);
if ((*data)[dim] > top5Value[0]) {
// printf("if((*data)[dim] > top5Value[0]) clear\n");
top5Value[0] = (*data)[dim];
top5Index[0] = dim - start;
// printf("top5Value[0] = %f, top5Index[0] = %d\n", (float)top5Value[0], (float)top5index[0]);
for (int i = 0; i < 4; i++) {
// printf("for(int i = 0; i < 4; i++) clear\n");
// printf("top5Value[0] = %f, top5Index[0] = %d\n", (float)top5Value[0], (float)top5index[0]);
if (top5Value[i] > top5Value[i + 1]) {
// printf("if(top5Value[i] > top5Value[i+1]) clear\n");
// printf("top5Value[%d] = %f, top5Index[%d] = %d\n", i, (float)top5Value[i], i, (float)top5index[i]);
std::swap(top5Value[i], top5Value[i + 1]);
std::swap(top5Index[i], top5Index[i + 1]);
// printf("swap clear\n");
// printf("top5Value[%d] = %f, top5Index[%d] = %d\n", i, (float)top5Value[i], i, (float)top5index[i]);
} else break;
}
}
}
}
보류
메모
Triplet loss와 Quadruplet loss를 이용하여 실제 feature extraction neural net을 학습하기 위해서는 실제 data를 load하여 triplet (x_i,x_pos,x_neg)로 batch를 구성하기 위한 Data Loader가 필요하다.
Dataset 클래스와 DataLoader 클래스
Dataset 클래스: dataset으로부터 sample data를 읽어오며, dataset 중 특정 index의 sample을 제공하는 GetData(int idx) 함수를 제공한다.
DataLoader 클래스: dataset 클래스의 기능을 이용하여 각 기준 sample들에 대한 양성/음성 sample을 로드해 배치를 구성한다.
(--> 이것 전에 각 기준 샘플에 대한 positive/negative/other_negative을 선택해야 한다.)
양성 샘플: 각 block 안에서 anchor와 거리가 가장 먼 동일 클래스 샘플
음성 샘플: 각 block 안에서 anchor와 거리가 가장 가까운 타 클래스 샘플
음 난 바본가