[WICWIU] code 분석

Hα ყҽσɳɠ·2020년 7월 28일
0

WICWIU

목록 보기
3/5
post-thumbnail

GetTop5Index

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;
            }
        }
    }
}

보류


메모



LossFunction



Triplet loss와 Quadruplet loss를 이용하여 실제 feature extraction neural net을 학습하기 위해서는 실제 data를 load하여 triplet (x_i,x_pos,x_neg)로 batch를 구성하기 위한 Data Loader가 필요하다.

Dataset 클래스와 DataLoader 클래스

WICWIU_src > Dataset.hpp

Dataset 클래스: dataset으로부터 sample data를 읽어오며, dataset 중 특정 index의 sample을 제공하는 GetData(int idx) 함수를 제공한다.

WICWIU_src > DataLoader.hpp

DataLoader 클래스: dataset 클래스의 기능을 이용하여 각 기준 sample들에 대한 양성/음성 sample을 로드해 배치를 구성한다.
(--> 이것 전에 각 기준 샘플에 대한 positive/negative/other_negative을 선택해야 한다.)

선택 알고리즘

양성 샘플: 각 block 안에서 anchor와 거리가 가장 먼 동일 클래스 샘플
음성 샘플: 각 block 안에서 anchor와 거리가 가장 가까운 타 클래스 샘플


음 난 바본가

profile
𝑯𝒐𝒏𝒆𝒔𝒕𝒚 𝑰𝒏𝒕𝒆𝒈𝒓𝒊𝒕𝒚 𝑬𝒙𝒄𝒆𝒍𝒍𝒆𝒏𝒄𝒆

0개의 댓글