전체 글 70

파이썬 문자열 다루는 방법 1

개발을 하면 문자열을 다루는 경우가 많습니다. 사용자 입력, 로그 출력, 에러 메세지 출력 등 문자열 처리 코드는 어디에도 빠지지 않는 것 같습니다. 단순히 입출력용이 아니더라도 데이터 처리, 통신, 저장, 분석에 사용되는 핵심 요소로서 사용되기도 합니다. 그래서 이번 포스팅에서는 Pythonic하게 문자열을 다루는 방법에 대해 알아봅시다. bytes와 str파이썬 3에서는 문자열 데이터와 시퀀스를 표현하는 두 가지 타입이 있습니다. bytes와 str인데요.그 차이는 아래와 같습니다.bytes: 기계가 이해할 수 있도록 부호가 없는 8바이트 데이터(종종 아스키(ASCII) 인코딩을 써서 내부 문자를 표시한다고 합니다.)str: 사람이 읽을 수 있는 텍스트 데이터(유니코드 코드 포인트가 들어 있습니다.)..

빅오(Big-O)란?

빅오는 알고리즘 공부를 하면 반드시 다루는 중요한 주제이다. Computer science에서 빅오는 입력값이 커질 때 알고리즘 실행 시간(시간복잡도), 공간 요구사항(공간 복잡도)가 어떻게 증가하는지를 분류하는 데 사용된다. 즉 알고리즘이 얼마나 효율적인지 판단하는 지표라는 것을 의미한다. 이번 포스팅에서 빅오로 알고리즘의 효율성을 어떻게 표현하는 지 알아보자. 빅오(Big-O)란 입력이 무한대로 커질때 함수의 상한을 설명하는 수학적 표기 방법을 일컫는다. 실행 시간의 관점에서는 점근적 실행 시간을 표기한다(= 시간 복잡도)라고 하는데 쉽게 설명하면 입력값 n이 커질 때(무한대를 향할때), 함수의 실행 시간의 추이를 의미한다고 보면 된다. 컴퓨터의 연산 능력으로 인해 아무리 복잡한 알고리즘이라도 입력의..

파이썬스러운 예외 처리 방법

파이썬에서는 예외를 처리하는 과정에서 특정 동작을 수행하려면 4가지 경우를 고려하여 조합해 사용할 수가 있습니다. 이 구조를 잘 활용하면 예외 처리 로직이 명확해지고, 버그가 줄어들며, 코드 유지보수가 쉬워집니다.1. 네 가지 예외처리 블록파이썬에서는 기본적으로 try, except, else, finally의 네 가지 블록을 조합하여 예외 처리를 할 수 있습니다. 각 블록이 가져야 하는 의미는 다음과 같습니다.try: 예외가 발생할 수 있는 코드를 실행하는 블록입니다.except: 예외가 발생했을 때 실행되는 블록입니다.else: 예외가 발생하지 않았을 때만 실행되는 블록입니다. (try가 성공했을 때 실행)finally: 예외 발생 여부와 상관없이 무조건 실행되는 블록입니다. 자원 정리 등에 자주 사..

Pythonic Thinking

Pythonic Thinkning는 파이썬스러운 사고방식을 뜻하는 데, 이는 파이썬으로 코딩할 때 내가 파이썬스러운, 파이썬의 의도에 맞게 생각하고 있는 지 등 문법을 넘어서 그 철학과 문화를 이해하는 것을 의미합니다. 파이썬은 문법이 쉬운 만큼 누구나 빠르게 시작할 수 있긴 하지만, 시간이 지날수록 협업의 관점에서 “파이썬답게” 쓰는 것이 얼마나 중요한 지를 깨닫게면서 python thinking의 필요성을 느끼는 것 같습니다.파이썬 철학은 import this를 입력하면 볼 수 있는 Zen of python에서 잘 나타납니다. 몇 가지 대표적인 원칙을 보면,명시적인 것이 암시적인 것보다 낫다.단순함이 복잡함보다 낫다.가독성은 중요하다.특별한 경우는 많지 않지만, 그런 경우조차도 일관성이 중요하다. 이..

Effective python 소개

Effective python 카테고리에서는 파이썬 개발자로서 더 나은 코드, 더 안정적인 아키텍처, 더 효율적인 성능을 고민했던 내용들에 대해설명하고 공유하고자 합니다. 개념이나 실전 예제와 같은 경우는 Brett Slatkin의 『파이썬 코딩의 기술(Effective Python) 2판』을 기반으로 할 예정입니다. 단순히 문법을 아는 것을 넘어, “왜 그렇게 코딩해야 하는가?”, “어떤 방식이 파이썬스럽고 효율적인가?”를 고민한 내용을 같이 공유하고 살펴보는 시간이 되기를 소망합니다!개인적으로는 effective python 카테고리의 글을 쓰면서 이를 실전에서 어떻게 써먹을 지 고민하면서, 파이썬 초급 개발자에서 중급 개발자로 성장하는 계기가 되면 좋겠습니다. 이 블로그 시리즈의 목적은 다음과 같습..

불균형한 데이터 세트에서 모델을 학습하는 방법

딥러닝 모델을 학습시키다 보면 현실 세계에서 불균형한 데이터 세트를 접하는 경우가 많다. 예를 들어, 의료 진단 데이터에서 질병이 있는 환자보다 건강한 환자가 훨씬 많거나, 금융 사기 탐지 데이터에서 정상 거래가 부정 거래보다 압도적으로 많은 경우가 그렇다. 이런 불균형 데이터는 모델의 학습과 성능 평가에 심각한 영향을 미칠 수 있다. 그렇다면, 모델의 성능을 저하시키지 않으면서 불균형 데이터를 학습하려면 어떤 방법을 사용할 수 있을까? 이번 포스팅에서 효과적인 해결 방법을 알아보자. 불균형 데이터는 특정 클래스의 샘플 수가 다른 클래스보다 현저히 적거나 많은 경우를 의미한다. 이로 인해 모델이 다수 클래스를 과도하게 학습하고, 소수 클래스에 대해 제대로 학습하지 못하는 문제가 발생한다. 이 문제를 해..

Cross-Entropy란?

딥러닝 모델을 활용하여 다양한 task를 해결하는 데 다양한 loss function이 사용된다. 그중 분류와 같은 task에서 정답과 예측 값의 확률 분포를 차이를 좁히는 방식으로 모델이 학습한다. 이때 사용되는 loss가 cross-entropy loss이다. 이번 포스팅에서 cross entropy에 대해 알아보자! Cross Entropy의 개념을 알기 위해선 먼저 알아야 할 개념이 있다. 바로 "Entropy" 이다.1. EntropyEntropy(엔트로피)는 정보 이론에서의 정보량에 대한 기댓값을 의미한다. 이는 정보의 불확실성을 나타내며 이 값이 높을수록 다양한 정보가 많아 확률이 낮다는 것을 의미한다. 가령 (1) 주머니 속에 빨간 공, 파란 공, 노란 공, 초록공이 있는 경우와 (2)..

[cs231n] 5강. Convolutional Neural Networks

이번 5강에서는 Vision Task를 효율적으로 해결하는 네트워크 구조인 Convolutional neural network의 역사와 작동 원리에 대해 알아본다. 지난 시간에 배운 내용은 위 그림과 같다. 2개의 퍼셉트론 층을 쌓았다. 단순히 선형 변환식을 겹쳐서 쌓아 최종 스코어를 얻었다. 이는 명확하게 한계가 있다. 각 이미지의 지역적 정보를 활용하지 못할뿐더러 각 입력이 모든 출력에 개입한다는 점이 그렇다. 이러한 한계점을 CNN이 해결해준다. CNN의 등장 배경의 역사를 거슬러 올라가면 아주 오래전으로 거슬러 올라간다.(1957년) 그러한 배경은 차치하고 CNN 등장에 가장 직접적인 역할을 한 것은 LeCun의 모델이다. 위의 왼쪽 그림이 LeCun의 모델의 구조인데 사실 CNN과 거의 똑같..

인공지능/cs231n 2024.06.19

[cs231n] 4강. Backpropagation and Neural Networks

이번 4강에서는 backpropagation의 작동 원리와 Neural network의 아키텍처에 대해 간략히 알아본다. 지금까지 배운 것은 다음과 같다. 이미지에 대한 score를 구하고 이 값을 Loss function에 적용했다. 그 후에 Data loss를 구하여 w(파라미터)에 대한 data loss의 기울기를 구했다. 이때 gradient descent 방식이 사용되어 최적의 loss를 갖도록 파라미터를 업데이트 했다는 것이다. 위 그림에서 알 수 있듯이 입력 이미지로부터 loss까지 도달하기에 수 많은 weights(model parameter)가 있다. 기울기를 구하는 건 알겠는데, layer를 거치면서 생기는 이 많은 weights의 기울기는 어떻게 한번에 구할 수 있을까? 이..

인공지능/cs231n 2024.06.05

8장. 확산 모델(diffusion model)

2020년에 획기적인 확산 모델 논문이 나왔다. 이름하여 DDPM! (denoising diffusion probablistic model의 줄임말)최근 생성 모델링에서 핫한(?) diffusion 모델의 주요 논문이다. 이번 포스팅에서 diffision 모델이 무엇이고 그 기본 원리와 이를 작동하게 하기 위한 모델의 구성 요소에 대해 알아보자!1. Denoising diffusion modelDenoising diffusion model을 직영하면 잡음 제거 확산 모델이다. 이 모델의 핵심 아이디어는 다음과 같다.연속해서(여러 번의 과정으로) 매우 조금씩 이미지에서 잡음을 제거하도록 모델을 훈련시키는 것이다. 그렇게 되면 이론적으로 완전히 랜덤한 잡음에서 훈련 세트의 이미지와 같은 이미지를 얻을 수 있..