파이썬

    [python] finally 블록 - 파이썬의 자원정리 방법

    파이썬으로 작업하다보면 예외 처리시, finally 블록을 사용하는 것을 곧잘 목격할 수 있습니다. finally는 언제 사용하는 것일까요? 이 finally 블록은 예외 발생 여부와 상관없이 반드시 실행해야 할 명령을 지정합니다. 이해를 돕기 위해 예를 들어보겠습니다. 어떠한 데이터 분석과제를 위해 모든 gpu자원을 하나의 계정(user A)으로 할당해주었습니다. 그렇다면 동일한 서버 내 다른 유저(user B)는 사용중인 gpu에 접근할 수 없을 것입니다. 이때 만약에 user A가 딥러닝을 돌려놓고 밥먹으러 나갔다면, 또는 외출했다고 가정해보겠습니다. user B는 gpu를 활용해야 하지만, user A가 사용하고 있어서 활용하지 못하게 됩니다. 하지만 user A의 딥러닝 코드가 에러가 났다면, ..

    [python] is 연산자란?

    파이썬에서 is 연산자는 두 변수가 같은 객체를 가리키고 있는지 확인할 때 is 구문을 사용한다. 그렇다면 is 연산자와 같음을 나타내는 == 연산자의 차이점은 무엇일까? 아래 코드를 통해 이해해보자. # 3개의 리스트 생성 list1 = [1, 2, 3] # 리스트 할당 list2 = list1 # 리스트1을 대입 받는 방식으로 리스트2 생성 list3 = list1.copy() # 리스트1의 사본을 리스트3의 값으로 할당 print('list1 과 list2는 같은 객체를 가리키고 있나요? : ', list1 is list2) print('list1 과 list3은 같은 객체를 가리키고 있나요? : ', list1 is list3) print('list2 와 list3은 같은 객체를 가리키고 있나요?..

    [python] 키워드 가변 인수 (keyword variable arguments)

    (본 포스팅은 김상형 저자의 '파이썬 정복' 책을 참조했습니다) 파이썬을 활용하다보면 함수를 정의하거나 불러올 때 **kwargs 또는 **args와 같은 것을 곧잘 목격하셨을 거라고 생각합니다. 이 친구들은 키워드 가변 인수(keyword arguments kwargs 등으로 표기됨)를 의미하는데요. 호출원에서 여러 개의 키워드 인수를 전달하면, 인수의 이름과 값을 쌍으로 사전으로 만들어서 전달합니다. 함수 내부에서는 사전을 읽듯이 인수값을 꺼내 사용합니다. 아래 간단한 활용 예제를 살펴보겠습니다. # keyword variable argument 활용 예제 def calcstep(**args): begin = args['begin'] end = args['end'] step = args['step']..

    [python] 함수 - 가변 인수

    파이썬 인수에 대해 알아보겠습니다. 파이썬을 활용하다 보면, 아래와 같은 함수 방식으로 인자를 주는 것을 종종 보셨을 겁니다. # 1번 케이스 def function(*args): ...(이하 코드 생략)... # 2번 케이스 def function2(**kwargs): ...(이하 코드 생략)... 이렇게 인수 이름 앞에 * 기호를 붙이면, 이 자리에 여러 개의 인수가 올 수 있습니다. 이것을 '가변 인수'라고 지칭합니다. 가변 인수의 특징은 정해진 개수만큼의 실인수를 전달해야할 필요가 없습니다. 가변 인수는 임의 개수의 인수를 받는 다는 것이 특징입니다. 아래 예를 통해 확인해보겠습니다. def intsum(*ints): sum = 0 for num in ints: sum += num return s..

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

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

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

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

    [Conda] 콘다 가상환경 복사

    다양한 직무의 사람들이 콘다가 제공하는 가상환경을 활용한다고 생각한다. 특히 필자와 같이 데이터 직군에 종사하는 사람이라면, tensorflow를 사용할 때, BERT를 사용할 때, 그 외 다른 언어 모델링, 비전에 관련된 패키지를 사용할 때, 다른 데이터사이언스 패키지와 버전을 호환해줘야 하는 문제점이 빈번하게 발생한다. 예를 들면 tensorflow의 특정 버전에서 딥러닝 레이어 사용 시 numpy의 버전을 맞춰주지 않으면 객체를 생성할 수 없는 에러가 발생하기도 하고, huggingface의 transformers 또한 특정 버전을 맞춰줘야하는 여러 디펜던시가 얽힌 상황들이 자주 발생한다. 따라서 필자처럼 가상환경 내 패키지가 꼬이는 것을 방지하기 위해 가상환경을 복사해서 복사된 가상환경에서 새로운..

    파이썬과 객체지향 (python and class) 3 - 생성자(__init__, initializer)

    파이썬을 하다보면 __init__ 이라는 친구를 종종 만나실 수 있습니다. 많은 경우에서 class안에서 가장 처음으로 정의하는 함수 이기도 하죠. 파이썬에서 이친구는 생성자(initializer)라고 불립니다. 이 생성자는 어떨때 쓰일까요? 아래 예제를 통해 한번 살펴보겠습니다. # 자동차 class를 만들어보자. class Car: def set_car_spec(self, brand: str, model: str): self.brand = brand self.model = model def info(self): context = {'brand': self.brand, 'model': self.model} print(context) # ***여기서 self는 class 자체를 지칭한다. my_car =..