파이썬

    [pytorch] torch.tensor.detach() 의 기능

    파이토치에서 Tensor 객체의 detach() 메소드는 현재 Tensor 객체와 동일한 데이터를 가지지만 연산 그래프(Computational Graph)에서 분리된 새로운 Tensor 객체를 생성합니다. 이 메소드는 일반적으로 Tensor 객체를 다른 Tensor 객체로 변환하고자 할 때 사용됩니다. 예를 들어, 주어진 Tensor 객체에 대한 연산의 결과로 생성된 새로운 Tensor 객체가 있을 때, 이 새로운 Tensor 객체를 사용하여 추가적인 계산을 수행하고자 할 때, 기존 Tensor 객체의 연산 그래프와의 의존성을 제거하여 메모리 사용량을 줄이고 계산 속도를 향상시키는 데 유용합니다. detach() 메소드는 requires_grad 속성을 False로 설정하여 기존 Tensor 객체와 다..

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

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

    [python] 반복자(iterator)와 제너레이터(generator)

    반복자(iterator)를 사용하는 이유 파이썬을 사용하다보면 어느 순간 심심치 않게 iter() 또는 next() 등을 목격했으리라 생각한다. 아마 파이썬으로 처음 프로그래밍을 공부했다면 (필자와 같은 비전공자) "결국에는 for문을 활용해서 사용하는 거 같은데.. 쉽게 그냥 list에 담아두고 사용하면 되지 왜 번거롭게 iterator를 만들 당최 왜 사용할까?" 라는 생각이 들 수도 있다. iterator를 사용하는데 여러 이유가 있겠지만, 기본적으로 시간과 비용 측면에서 매우 효율적이기 때문이다. 가장 직관적인 예제는 빅데이터를 활용한 딥러닝 모델을 구현할 때인데, 예를 들면 데이터 100만개를 학습한다고 가정해보자. 100만개를 시작부터 불러놓고 학습을 하는 것과 iterator가 필요한 데이터..

    [chatGPT API 연동] chat GPT api 연동 후 한국어 감정분류

    chatGPT api 연동 방법에 대해 살펴보겠습니다. chatGPT가 출시된 이후, 지금까지 그냥 웹페이지로 이동해서 대화형식으로 질의를 하고 답변을 받아왔습니다. 만약 연동이 처음이라면, 연동을 위해서 두 가지 작업이 필요합니다. API key 발급 받기 openai 설치하기 API Key 발급 받기 API key를 발급 받으려면 openai 웹사이트로 이동할 필요가 있습니다. https://platform.openai.com/ OpenAI API An API for accessing new AI models developed by OpenAI platform.openai.com 위 링크를 통해 이동하신 뒤, 로그인을 진행하면 됩니다. 다음으로 아래 이미지처럼 우측 상단에서 본인 프로필을 눌러 Vie..

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

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

    [python] 클래스 메서드(class method)와 정적 메서드(static method)

    1. 클래스 메서드 (Class Method) 아래의 코드처럼 일반적으로 클래스 내에서 함수를 정의하고 사용하는 메서드는 객체에 소속되는 인스턴스 메서드이다. class Human: def __init__(self, age, name): self.age = age self.name = name def intro(self): print(str(self.age) + "살 " + self.name + "입니다.") park = Human(13, "박진명") park.intro() Human 클래스의 intro 메서드는 첫 번째 인수 self를 받아 이 객체에 대한 작업을 수행한다. 따라서, park 객체에 대해 호출되며, 해당 인스턴스의 나이와 이름을 조사하여 출력한다. 즉 park.intro() 메서드에서 ..

    [python] stack 구현 (고정길이 스택 fixed stack, class 활용)

    (본 포스팅은 Do It! 시리즈의 '자료구조와 함께 배우는 알고리즘 입문 - 파이썬편'을 참고하여 작성하였습니다.) 데이터를 임시 저장하는 기본 자료 구조는 대표적으로 두 가지가 있는데, 스택(stack)과 큐(queue)이다. 스택은 일반적으로 데이터 입력과 출력 순서가 후입선출(Last in First Out)인 것이 특징이다. 이 기능을 구현하기 위해서 우리가 생각해봐야할 부분은 어떤 것이 있을까? 크게 살펴보자면 첫째로, 데이터를 집어 넣는 push 기능 둘째로, 데이터를 꺼내는 pop 기능 셋째로, 스택의 길이를 알려주는 len 기능 넷째로, 스택이 비었는지 확인하는 기능 다섯번 째로, 스택이 가득 차 있는지 확인하는 기능 여섯번 째로, 특정 값이 스택 어디에 위치해있는지 확인하는 기능 일곱번..

    [python] 파이썬 Class 내 self.<variable name>에서 self 키워드는 어떤 역할을 할까?

    파이썬 클래스를 처음 접하다보면, 추상적인 개념에 적잖이 당황할 수도 있습니다. 특히 class를 만들 때, class안에 함수를 정의할 때 self 라는 키워드를 많이 보셨을 겁니다. 이 self는 굉장히 중요한 역할을 하게 되는데, 무엇을 의미하는지 간단하게 알아보도록 하겠습니다. self라는 키워드는 클래스가 만들어진 이후, 인스턴스로서 활용될 때 굉장히 중요한 역할을 합니다. 이때 class variable과 instance variable에 대해 알아야 할 필요가 있는데, 간단하게 말해서 self가 활용된다면 이는 곧 class 전역에 영향을 미치는 것이 아닌 인스턴스에만 국한되어 작동하게 됩니다. 예시 1) class_variable vs instance_variable 코드를 보면서 살펴보겠..