Author: byun1114

  • 데이터 분할

    train, val, test 등으로 자료를 분할해서 사용할 수 밖에 없는 여건이 대부분인 경우가 많다. 이러한 3개가 아니면 train, val 등으로 2개로 나누어서 사용하기도 한다. 자료를 분할하는 방법은 여러가지가 있는데, class가 있는 경우에도 비율을 유지하며 분할하는 것에 대한 것은 찾지 못했다. PyTorch에서 제공하는 함수 중에서 torch.utils.data.SubsetRandomSampler이 가장 비슷한 것 같은데 예시를 보면 왠지 내가 원하는 기능이 아닌 것 같다.

    Class마다 개별적으로 코딩해서 넣어주어야 하지만, 나에게 가장 맞는 방법을 구현해 보았다.

    일단 파일 목록을 섞어 준다. 그리고 코드 오류를 확인하기 위하여 데이터셋을 줄일 수 있도록 한다. 예시는 0.02로 들었다.

    props = 0.02
    file_A = os.listdir('...')
    numpy.random.seed(21)
    numpy.random.shuffle(file_A)

    train, val, test 나눌 위치를 정한다. 임의로 섞었으니 앞부분부터 선택해도 상관없을 것이다.필요한 것은 train과 val 사이의 숫자와 val과 test 사이의 숫자이다. 정수에서 0~1 실수를 곱하는 것이니 소수점이 나오지만, 데이터는 정수이니 이와 관련된 부분을 고려한다.

    data_split_rate = (0.8, 0.1, 0.1)
    train_idx = int(len(file_A) * data_split_rate[0] * props)
    val_idx   = train_idx + int(len(file_A) * data_split_rate[1] * props)
    test_idx = int(len(file_A) * props)

    이제 0부터 진행하면서 기준 위치를 지나면 복사할 폴더를 변경하도록 해준다.

    for i, file_name in enumerate(file_A):
        if i < train_idx:
            os.system('cp FROM경로'+file_name+' TO_train/경로')
        if i >= train_idx and i < val_idx:
            os.system('cp FROM경로'+file_name+' TO_val/경로')
        if i >= val_idx and i < test_idx:
            os.system('cp FROM경로'+file_name+' TO_test/경로')
  • GPU 사용하기

    일단 컴퓨터에 장착한다. 나의 경우에는 메인보드의 VGA로 모니터에 연결해서 VGA에 따로 모니터를 연결하지는 않았다.

    NVIDA 홈페이지에 있는 방법대로 CUDA를 다운로드 한다.

    PyTorch 홈페이지에 가서 역시 CUDA를 이용한 PyTorch를 재설치한다. NVIDIA는 CUDA 11.1이고 PyTorch 11.0인데 일단 상관없이 잘 된다.

    배치 사이즈를 조절한다. 큰 숫자를 넣으면 메모리가 부족하다고 한다. 적절한 범위까지 꽤 낮추어 준다. 메모리가 잘 줄어들지 않으면 가장 간단하게 Notebook을 종료시켰다가 다시 실행한다. 충분히 줄어들어서 실행이 되면 기다린다. GPU만 쓰는게 아니라 중간에 CPU도 쓰는게 있다. 병행 작업은 너무 빡신것은 실행하지 않는 것이 좋을 것 같다.

    학습 속도가 엄청 빠르다.

  • AVERAGEIFS와 STDEVIF

    엑셀이나 Google Sheet에서 특정 조건을 만족하는 평균을 구하고자 할 때에는 AVERAGEIF나 AVERAGEIFS를 이용하면 된다.

    그러면 특정 조건을 만족하는 표준 편차를 구하기 위해서는 STDEVIF 같은 함수가 있으면 좋을텐데 그것은 없다. 그럴 경우 사용할 수 있는 명령어는 다음과 같다.

    =STDEV(FILTER( ))

    AVERAGEIF에서는 조건을 먼저 써준다면, FILTER를 이용할 경우에는 조건을 나중에 써준다. 도움말 참고하면 됨.

  • 퇴계와 고봉 편지를 쓰다. 김영두 옮김

    기대승과 이황이 서로 주고 받은 편지를 책으로 정리하였다. 사단칠정론은 고등학교 윤리 수업에서나 들었고, 당시에도 이해가 되지 않았고, 물론 지금도 이해하지 못한다. 따라서, 내용을 이해하려고 하면 사단칠정론이나 태극 같은 어려운 부분을 알아야 한다.

    하지만, 다른 부분으로는 이 책을 통해서 배울 것이 있다. 가장 중요한 것은, 이황은 기대승보다 26살 정도 나이가 많고, 사회적으로 훨씬 더 인정받는 사람이었다. 하지만, 둘이 주고 받는 편지는 서로가 서로를 존중하는 내용으로 전개가 된다. 이황이 기대승한테 이 구절 잘 모르겠는데 혹시 아느냐고 물어보는 내용이 있는데, 이는 상대방을 존중하기 때문에 가능한 것일 것이다. 이러한 태도는 앞으로 다른 의견을 평가하는 글을 쓸 때 매우 중요할 것으로 생각한다.

    당시 시대상의 한계일지도 모르겠는데, 주자의 영향이 매우 막강하다. 주자의 의견은 옳은 것이요 지켜야 할 것으로 받아들이고 있다. 기존의 가치관을 넘어선다는 것은 매우 어려운 일일 것이나, 당대 최고의 석학이라면 보다 새로운 의견을 내세우는 것도 필요하지 않을까 싶다.