Author: byun1114

  • Early Stopping

    PyTorch에서는 별도의 함수로 지정되어 있는 것 같지 않지만, 기본 개념을 알고 있다면 어렵지 않게 직접 구현할 수 있다. R과 마찬가지로 Python에서는 for 반복문에서 중단하는 명령어는 break이다. 기본 제공되는 스크립트에서 best accuracy를 평가하는 부분에 현재 epoch 번호도 저장하도록 변수를 하나 더 지정한다. 그리고 epoch와 관련된 반복문 마지막 부분에 현재 epoch과 best accuracy 때에 epoch 차이를 확인하여 일정 범위를 넘어서면 break가 동작하도록 조건문을 설정한다.

    def train_model(model, criterion, optimizer, epochs):
        ...
        for epoch in range(epochs):
            ...
            if phase == 'val' and epoch_acc > best_acc:
                ...
                best_epoch = epoch
            if (epoch - best_epoch >= 10):
                break

  • 투자에 대한 생각, 하워드 막스

    Oaktree Capital Management의 공동 설립자인 Howard Marks의 책이다. 이 사람의 저술한 책이 몇 권이 있는데 서문의 내용으로 보면 아마 The Most Important Thing Illuminated: Uncommon Sense for the Thoughtful Investor를 번역한 것으로 생각된다.

    현재 주식 시장은 꽤 뜨겁다고 보여지는데, 이러한 상황에서 어떻게 투자해야 할 것인지 뜨거움을 식혀주는 내용으로 가득찬 책이다. 좋은 내용이 꽤 많다. 책 전체 내용 중 마지막 문단의 첫 번째 문장이 이 책 전체의 내용을 대표할 수 있을 것이라고 생각된다.

    남다른 통찰력을 가진 투자자들만이 미래의 사건들을 좌우하는 확률분포를 주기적으로 예측할 수 있으며, 잠재 수익이 확률분포도의 좌측 꼬리에 숨어 있는 리스크를 보상하는 때가 언제인지 감지할 수 있다.

    참고로 Oaktree는 부실 채권 투자 전문회사이다. 2019 Q2까지 1달러 언저리 정도의 배당금을 지불했는데 이 회사의 최근 5년의 주식 평균 가격은 25~26달러였으며, 2020년에도 안정적으로 주가를 유지했다.

    여기서 자주 언급되는 그 메모는 홈페이지에 가면 정말로 구독을 할 수 있다. 다른 목적으로 이용될 수는 없다고 명시되어 있다. 과거 평균을 보면 대략 1년에 3번 정도는 작성하는 것 같으며 2020년에는 꽤 작성하였다. Marks 씨는 지금 대략 75세 정도이다.

  • 리눅스 화면 끄기

    보통 리눅스를 CLI 모드로 사용하게 설치하면 부팅 후에 ID를 입력하는 화면에서 멈추게 된다. 그리고 추가 입력이 있을 때까지 계속 그 상태로 있다. 이 상황에서 모니터를 끄게 하는 방법을 찾아보려고 했는데 이상하게 하나도 먹히지 않았다. 하지만 그 중에서 화면을 어둡게 하는 방법은 찾았고 성공했다.

    /etc/default/grub 파일을 수정한다. GRUB_CMDLINE_LINUX_DEFAULT 구절을 찾는다. 어떤 값이 입력되어 있는 경우가 있을 수 있다.

    GRUB_CMDLINE_LINUX_DEFAULT="quite"

    그 뒤에 consoleblank=10을 입력한다. 여기서는 단위가 초(second)이다.

    GRUB_CMDLINE_LINUX_DEFAULT="quite consoleblank=10"

    그 다음에 이를 적용시켜 준다.

    sudo update-grub
  • require()

    R을 사용한지 거의 10년이 되어가는데 이제야 library()와 require()를 구별할 수 있게 되었다. 일단 둘 다 패키지를 불러온다는 점에 있어서는 동일하다.

    패키지가 없을 경우 library()는 오류 메세지를 출력한다.

    require()은 True/False로 결과를 반납한다. 패키지가 있으면 패키지가 로딩이 된다. 이를 이용하면 패키지가 없을 때 패키지를 설치하도록 하는 것을 구현할 수 있다. CDM 연구로 다른 사람들 스크립트를 볼 때 이런것도 좀 챙겼으면 더 빨리 알 수 있었을 텐데.

    if (!require('caret')) {install.packages('caret')}