TensorFlow

    [pytorch] 파이토치 opencv, mxnet, torchmetrics 설치 시 gpu 인식 불가 이슈 해결

    pytorch나 tensorflow를 다루다보면 어떠한 패키지를 설치했을 때, 패키지가 cpu 버전으로 내려가는 이슈가 있어서 gpu 인식을 못한다. 이때 해결하기가 굉장히 번거로운데, 필자 같은 경우에는 가상환경을 처음부터 재설치했다. 이런 이슈는 특히 텐서플로우보다는 pytorch에서 더 많이 발생했다. 그중에서도 많이 설치하는 라이브러리를 위주로 몇개 설명을 하자면... opencv 이 패키지는 왜인지는 모르겠지만 conda를 통해 opencv를 설치했을 때는 pytorch에서 cuda를 인식하지 못하게 되었다. 이 경우 pip install opencv-python 명령어를 통해 설치하면 말끔하게 해결되니 참고하자. mxnet mxnet과 같은 경우도 정상적으로 설치하면 문제가 되지 않으나.. ..

    [python] 파이썬 class의 __call__ 함수 (매직메소드)

    파이썬을 다루다보면 __call__함수에 직면하는 경우가 생깁니다. 저와 같은 데이터 사이언티스트의 경우에는 __call__함수는 Tensorflow의 def call() 메서드나 PyTorch의 def forward() 메서드가 대표적이라고 할 수 있는데요. 인스턴스를 생성하고 자동으로 클래스의 객체도 호출할 수 있게 만드는 기능입니다. 아래처럼 리스트를 받아 난수 10개를 뿌려주는 난수생성기 클래스로 표현되었다고 생각해봅시다. 인스턴스 메서드 구현 아래처럼 pick 메서드를 활용할 때, 출력물이 생성되고, 10개의 난수를 담은 리스트가 리턴되는 것을 확인할 수 있습니다. import random class RandomNumberReturn: def __init__(self): self.numbers ..

    [tensorflow] 함수형 API 활용한 CNN 예시

    Functional API 특징 텐서플로우에서 제공하는 가장 직관적인 Sequential 모델은 쉽고 빠르게 레이어를 쌓아 딥러닝 모델을 만들 수 있습니다. 여기서 Sequential 모델은 네트워크 입력과 출력이 하나라가 가정합니다. 그리고 많은 경우에서 이 가정이 적절합니다. 하지만 이런 가정이 맞지 않는 경우가 발생할 수 있습니다. 예를 들면 개별 입력을 여러 개 필요로 하는 네트워크이거나 여러 개를 출력하는 네트워크의 경우에는 단순히 선형적으로 층을 쌓는 sequential 모델로는 구현할 수 없습니다. 이런 경우 함수형 API를 고려합니다. 함수형 API는 다양한 경우에서 활용할 수 있습니다. 아래의 그림처럼 소셜 미디어 포스팅을 통해 나이를 예측하고, 수입을 예측하고, 성별을 예측하는 하나의 ..

    [Tensorflow] AutoEncoder 오토인코더 구현하기

    본 포스팅은 Applied Deep Learning - Autoencoders 편을 참고하였습니다. 오토인코드는 입력과 출력이 동일한 피드포워드 신경망의 한 유형입니다. 입력을 의도적으로 낮은 차원의 '코드'로 압축, 이후에 이 압축된 '코드'라는 표현을 기반으로 출력을 재구성(reconstruct)합니다. 코드는 입력의 간결한 "요약" 또는 "압축"이며 '잠재 공간 포현 (latent space representation)'이라고도 합니다. 오토인코더의 구성요소 오토 인코더는 [ 인코더, 코드, 디코더 ] 총 3개의 요소로 구성되어 있습니다. 인코더는 입력을 압축하고, 압축된 입력은 코드가 됩니다. 디코더는 이 코드를 사용하여 입력을 재구성합니다. 아래는 오토인코더의 동작 예시입니다. MNIST의 데이..

    [딥러닝] 합성곱 신경망 - 직관적으로 convolutional layer 깊이에 대해 이해하기

    본 포스팅에서는 수식적으로 합성곱 연산을 설명하기 보다는 그림에 의존한 직관적인 내용을 이야기 해보겠음 합성곱 연산 완전 연결층(Dense Layer)과 합성곱 층(Convolutional Layer) 사이의 근본적인 차이는 어떻게 될까? Dense층은 입력 특성 공간에 있는 전역 패턴을 학습하지만, 합성곱 층은 지역 패턴을 학습합니다. 만약 이미지라면 작은 2D 윈도우로 입력에서 패턴을 찾습니다. 컨브넷은 두 가지 흥미로운 성질을 제공하는데요. 첫째, 학습된 패턴은 평행 이동 불변성(translation invariant)를 갖습니다. 컨브넷이 이미지의 오른쪽 아래 모서리에서 어떤 패턴을 학습했다면, 다른 곳(예를 들어 왼쪽 위 모서리)에서도 이 패턴을 인식할 수 있습니다. 해당 패턴을 학습했기 때문에..

    [Tensorflow] Multi GPU 사용하기 (gpu 병렬처리)

    데이터의 용량이 큰 경우, 가용할 수 있는 GPU가 여러 개인 경우, 더 효율적으로 모델을 학습할 수 있는 방법이 있습니다. 단일 GPU가 아닌 여러 개의 GPU를 활용하여 분산전략을 수행한다면, 더 빠르게 모델을 학습시킬 수 있습니다. (물론 너무 적은 데이터의 경우 데이터를 분할하는 시간이 더 오래걸리기 때문에, 그러한 경우에는 단일 GPU를 사용하면 됩니다) GPU병렬 처리에는 다양한 방법이 존재하는데요. 간단한 소개와 함께 대표적인 방법 코드를 통해 확인해보겠습니다. 방법1. MirroredStrategy TensorFlow에서 여러 gpu를 활용한 학습에 추천하는 방법입니다. 사전에 설정된 & 사용 가능한 모든 GPU자원을 동시에 활용을 하는 방법을 채택하는데요. 이때 입력 데이터는 병렬적으로 ..

    [tensorflow] tensorflow-metal 설치 방법 (m1맥북 gpu)

    설레는 맘으로 m1 맥을 구입하고, gpu를 로컬에서 돌려보고 싶은 마음은 다들 똑같겠죠? 하지만 환경설정부터 만만치 않습니다. 익숙했던 가상환경도 뭔가 복잡하게 설치를 거쳐야하는거 같고, 특히 가상환경처럼 에러가 많이 나는 경우 골치 아파지는 경우가 많아지기 때문이죠.. 그렇기때문에 가상환경에 한해서는 대부분 보수적일 수 밖에 없을거라 생각이 됩니다. 자 차근차근 설치하는 법을 공유해드리겠습니다. 아래 스텝만 따라오시길! (스텝이 굉장히 중요합니다!!!) 가상환경 설치 (아나콘다 & miniforge) 가상환경 생성 tensorflow-deps (tensorflow-dependencies) 설치 * tensorflow-macos 설치 * tensorflow-metal 설치 * jupyter 설치 (ju..