Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[7주차] 반도체 박막 두께 분석 경진대회 #7

Open
mingxoxo opened this issue Feb 4, 2021 · 5 comments
Open

[7주차] 반도체 박막 두께 분석 경진대회 #7

mingxoxo opened this issue Feb 4, 2021 · 5 comments

Comments

@mingxoxo
Copy link
Member

mingxoxo commented Feb 4, 2021

1등 코드 : https://dacon.io/competitions/official/235554/codeshare/651?page=1&dtype=recent&ptype=pub

@mingxoxo
Copy link
Member Author

mingxoxo commented Feb 4, 2021

itertools

python에서 제공하는 자신만의 반복자를 만드는 모듈 APL, Haskell 및 SML의 구성 요소에서 영감을 받은 반복기 빌딩 블록을 구현하며 각각은 파이썬에 적합한 형태로 재 작성

import itertools

  • 반복자(iterator)란 ?
    객체 지향적 프로그래밍에서 배열이나 그와 유사한 자료구조 내부의 요소를 순회(traversing)하는 객체
  • chain()
    : 리스트( lists/tuples/iterables ) 를 연결하는 것
letters = ['a', 'b', 'c', 'd', 'e', 'f']
booleans = [1, 0, 1, 0, 0, 1]
decimals = [0.1, 0.7, 0.4, 0.4, 0.5]
print(list(chain(letters, booleans, decimals)))

결과 : ['a', 'b', 'c', 'd', 'e', 'f', 1, 0, 1, 0, 0, 1, 0.1, 0.7, 0.4, 0.4, 0.5]
list()를 하지 않고 출력하게 되면 <itertools.chain object at 0x7f053ac09470> 이런식으로 출력됨.

  • izip()
    : 파이썬에서는 이미 요소를 튜플에 결합하는 zip () 함수가 표준 라이브러리에 있다.
    izip()은 거의 같은 방식으로 작동하지만 약간의 성능 향상을 위해 iterable 객체를 반환한다.
print(list(izip([1, 2, 3], ['a', 'b', 'c'])))

결과 : [(1, 'a'), (2, 'b'), (3, 'c')]

이 외에도 count(), imap(), islice(), tee(), cycle(), repeat(), dropwhile(), takewhile(), ifilter(), groupby() --- 가 있습니다. 출처의 링크에 설명히 자세하게 나와있습니다.

출처: https://hamait.tistory.com/803 [HAMA 블로그]

  • 1등 코드에서의 사용(chain())
layers = [['layer_1', 'layer_2', 'layer_3', 'layer_4'], [str(i) for i in np.arange(0, 226).tolist()]]
layers = list(chain(*layers))

image

layers앞에 *을 붙이지 않을 경우 unflattened result를 반환한다.
왜냐하면 chain은 각각의 list를 개별적으로 필요로 하는데 layers 통째로 하나의 항목으로 들어가기 때문이라고 한다.
*의 역할이 unpacking하여 함수에 전달하는 것 같다.

image
.from_iterable을 붙이면 *와 같은 역할을 한다.

image

@mingxoxo
Copy link
Member Author

mingxoxo commented Feb 4, 2021

  • dataframe.sample(frac=1) 을 통해 데이터 셔플

  • class PandasDataset(Dataset)
    여기서 torch.utils.data.Dataset을 상속받는다. getitem(), len() 오버라이딩
    image

https://pytorch.org/docs/stable/data.html#torch.utils.data.Dataset

  • Adam의 epsilon
    A small constant for numerical stability. This epsilon is "epsilon hat" in the Kingma and Ba paper (in the formula just before Section 2.1), not the epsilon in Algorithm 1 of the paper. Defaults to 1e-7.
    image
    루트v_t 가 0이 되면 나눌 때 오류 발생 --> 아주 작은 값을 넣어서 error가 나지 않도록 해준다고 한다.

https://www.tensorflow.org/api_docs/python/tf/keras/optimizers/Adam

  • DataLoader num_workers
    : num_workers은 학습 도중 CPU의 작업을 몇 개의 코어를 사용해서 진행할지에 대한 설정 파라미터
    해당 환경에서 사용 가능한 코어의 개수를 확인해보고 학습 외의 작업에 영향을 주지 않을 정도의 숫자로 설정해주시는 것이 좋다.

출처 : https://m.blog.naver.com/qbxlvnf11/221728476511

  • pow 함수 --> 몇 승을 곱해줄것이냐로 사용

@mingxoxo
Copy link
Member Author

mingxoxo commented Feb 4, 2021

GELU (Gaussian Error Linear Unit)

image

image

  • activation function(활성 함수)
    초기 인공 뉴런 -> 이진법 단위 활용 --> Sigmoid 함수에 의해 평준화 될 수 있다.
    -> 네트워크가 깊어짐에 따라 ReLU가 더 효과적이게 된다.
    -> 비선형성 함수인 GELU가 제안됨
  • dropout과 RELU, zoneout 결합되어지도록 ..?
  • 뉴런input에 x by m ∼ Bernoulli(Φ(x))를 곱해준다.
    뉴런 input이 특히 배치 정규화를 통해 정규분포를 따르는 경향이 있기 때문에 이 분포를 선택
    종종 신경망에서 결정론적 결정을 원하며, 이때문에 새로운 비선형성을 야기한다.
  • 더 부드러운 ReLU로 생각되어 질 수 있다.
  • GELU의 비선형성은 백분위수에 의한 입력에 가중치를 부여..?

GELU 논문 : https://arxiv.org/pdf/1606.08415.pdf
참고 : https://paperswithcode.com/method/gelu

@mingxoxo
Copy link
Member Author

mingxoxo commented Feb 4, 2021

Batch Normalization

각 feature의 평균과 분산을 구해서 batch에 있는 각 feature를 정규화 한다. batch 전반에 걸쳐 처리되기 때문에 batch size와 관련이 깊다.

Layer Normalization

각 input의 feature들에 대한 평균과 분산을 구해서 batch에 있는 각 input를 정규화 한다. 각 input에 대해서만 처리되므로 batch size와 전혀 상관 없다.

image
(그림에서 세로가 data기준 가로로 생각, 같은 row, 다른 feature)

image

출처 : https://yonghyuc.wordpress.com/2020/03/04/batch-norm-vs-layer-norm/

@mingxoxo
Copy link
Member Author

mingxoxo commented Feb 8, 2021

  • CuDNN
    CuDNN은 딥러닝에 특화된 CUDA library로 주로 환경 설정을 할 때 CUDA와 CuDNN을 함께 설치하고, 대부분 딥러닝 프레임워크에서 필수적으로 사용되는 라이브러리.
torch.backends.cudnn.deterministic = True
torch.backends.cudnn.benchmark = False

Randomness를 제어하기 위한 코드이다.
이 코드의 부작용으로 연산 처리속도의 감소가 있다.

출처 : https://hoya012.github.io/blog/reproducible_pytorch/

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant