잡다한 AI 관련 글들
![[Python] TypeError: exceptions must derive from BaseException](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbKgnci%2FbtrhGSqWo9o%2F39bgjq9RKSglNn3OB4X4wk%2Fimg.png)
[Python] TypeError: exceptions must derive from BaseException
Introduction 파이썬 개발 중 아주 가끔씩, 다음과 같은 TypeError 메시지를 만나볼 수 있다. TypeError: exceptions must derive from BaseException 뭐가 문제였을까? Solution 정답은 바로 이전 포스트에서도 언급했듯이, 파이썬3 에서는 BaseException 내장 클래스를 상속받는 클래스만이 예외 클래스로 인식되기 때문이다. 따라서 만약 예외 클래스를 인자로 받아야 하는 자리에 예외 클래스로 인식되지 않는 (BaseExeption을 상속받지 않는) 클래스를 적어놓는 경우 위와 같은 에러 메시지를 보게 된다. class FooClass: pass try: raise FooClass() except FooClass: print("Catch!")..

Introduction to Machine Learning in Production (1) - The Machine Learning Project Lifecycle
본 글은 Coursera의 Machine Learning Engineering for Production (MLOps) 특화 과정의 일부인 Introduction to Machine Learning in Production 강좌의 내용을 개인적인 의견과 함께 정리한 글이다. 원 강좌 내용에 관심이 생긴다면 한번 수강해 보도록 하자! Introduction 당신은 실제 세계의 문제를 풀기 위해 어떤 ML 모델을 개발했다. 그런데 이렇게 개발한 모델을 어떻게 배포하고 운영해야 할까? 또한 배포한 모델의 성능을 어떻게 모니터링하고, 어떻게 다시 개선시켜 배포할 수 있을까? ML 모델의 실제 배포와 운영은 모델 개발 단계에서와는 다른 직관과 스킬을 요구하며, 모델 개발 단계에서는 전혀 생각하지 못 했던 새로운 ..

Introduction to Machine Learning in Production (0) - Overview
본 글은 Coursera의 Machine Learning Engineering for Production (MLOps) 특화 과정의 일부인 Introduction to Machine Learning in Production 강좌의 내용을 개인적인 의견과 함께 정리한 글이다. 원 강좌 내용에 관심이 생긴다면 한번 수강해 보도록 하자! Class Overview 머신 러닝 학계를 들여다 보면, 실제 세계의 문제를 해결하고자 하는 머신 러닝 알고리즘 논문이 하루에도 수십, 수백 편 씩 아카이브에 게재된다. 이렇게 계속 새롭게 등장하는 ML 알고리즘들은 성능의 정량적 비교를 위해 고정된 데이터셋 하에서 통제된 학습/테스트 셋 조건을 이용해 평가되고, 한 시점에서 가장 높은 성능을 내는 알고리즘이 SOTA (St..
![[Python] 클래스가 object를 상속받는 경우](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcu53hY%2FbtraTa0xqlJ%2FnbnuKoiYJ3OFTQ45NRSSbK%2Fimg.png)
[Python] 클래스가 object를 상속받는 경우
Introduction 남의 파이썬 코드를 보다 보면, 종종 다음과 같은 형태의 클래스 선언과 마주하게 된다. class MyClass(object): # blah blah... 일단은 해당 라인만 보면 내가 선언한 클래스가 object 클래스를 상속 받아서 뭔가를 하고 있는 것처럼 보인다. 하지만 스크롤을 더 내려 봐도 상속을 받아서 따로 하는 것도 없어 보이고, 심지어는 object 상속을 제거해도 코드는 아무런 에러 없이 멀쩡히 돌아간다! 대체 이건 용도가 무엇이며 왜 굳이 넣는 걸까? 결론부터 말하자면, 파이썬 3에서의 object 상속은 표기상의 차이 이외에 상속 관계가 없는 클래스 선언과 아무런 차이점이 없다. 파이썬 2 (정확히는 2.2 이상) 에서는 클래스에 object를 명시적으로 상속시..
![[Python] 프로파일링 (profiling)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbDwBPy%2Fbtq4z2eN3DR%2FXdBpcY7mhO5kjpgJ4cg9g0%2Fimg.png)
[Python] 프로파일링 (profiling)
Introduction 파이썬 코드를 작성하다 보면 성능 최적화를 위해 코드의 실행 시간을 정확히 측정하고 싶을 때가 있다. 물론 아래와 같이 time 모듈을 이용해 시간 성능 저하가 예상되는 일부 코드 블럭의 실행 시간을 직접 측정해 볼 수 있지만, 요소별로 실행 시간을 측정하기가 불편하고, 무엇보다도 파이썬의 동적인 특성으로 인해 예상되는 지연 구간과 실제 지연이 일어나는 부분이 다를 수 있다는 문제가 있다. from time import time from math import sin, cos, pi def projectile_landing_position(velocity, angle, g_constant): """ XY평면 (0,0) 좌표에서 X축 기준 angle(deg,
![[Python] 파이썬 3.10 기능 소개](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9F0Na%2Fbtq8L8XCBpR%2FRCOh7C0XrcRivqNwNXiuj0%2Fimg.png)
[Python] 파이썬 3.10 기능 소개
Introduction 최근에 파이썬 3.10 업데이트 관련 소식이 간간히 들려오는데, 문득 어떤 점이 달라진 건지 궁금해진 차에 한번 관련 내용들을 정리해 보기로 했다. 이번 글에서는 파이썬 3.10의 주요 새 기능들을 간략히 정리할 예정이다. 글의 내용은 Python 3.10 beta 3 (3.10.0b3, 2021년 6월 17일 release) 를 기준으로 한다. 그리고 대부분의 예제 코드는 공식 도큐멘테이션을 참고했다! 맨 아래에 직접 pre-release 를 다운로드 할 수 있는 링크도 남겨두었으니 한번씩 체험해 봐도 좋을 듯 하다. (다음 글) [Python] 파이썬 3.11 기능 소개 1. 타입 힌트 관련 파이썬의 타입 힌트 기능에 관련된 기초적인 내용은 여기를 참고하자. 파이썬 자체는 동적..
![[Python] 파이썬 디버거 (pdb)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0X0Da%2Fbtq7SFgmetO%2FHiot5SSeyt3CNFK4fYYUJk%2Fimg.png)
[Python] 파이썬 디버거 (pdb)
Introduction 내가 작성한 파이썬 코드가 예상하던 대로 작동하지 않거나, 예기치 못한 오류로 자꾸 종료된다면 프로그램 내부의 지역 변수를 들여다 보고 원하는 지점에 원하는 값이 대입되고 있는 지를 한번 확인해 보면 좋을 것이다. 이를 위해서, 간단하게는 print 함수를 써서 확인이 필요한 지점마다 값을 출력하게 해 프로그램 실행 중의 변수를 확인하거나, 조그만 테스트 코드를 작성해 문제가 될 만한 상황을 재현해 볼 수 있다. 하지만 프로그램과 데이터의 규모가 커지고 복잡해질수록, 위와 같은 방법만으로는 문제의 원인을 해결하기가 여전히 어려울 수 있다. 이런 상황에서는 파이썬 디버거 (pdb) 가 유용한 해결책이 될 수 있다. pdb - Python debugger pdb 모듈은 파이썬을 위한 ..
![[Python] FIFO 큐와 데크(Deque)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb5qkcy%2Fbtq66UMQPIh%2FOMLD0K7LdmtSjvTk7xcCk1%2Fimg.png)
[Python] FIFO 큐와 데크(Deque)
Introduction 프로그램을 작성하다 보면 선입선출 (First-In First-Out, FIFO) 구조를 위해 큐 (Queue) 자료구조를 활용하면 좋을 때가 있다. FIFO 구조란 더 먼저 추가된 데이터를 먼저 사용하도록 하는, 말 그대로 순차적인 대기열을 떠올리면 이해가 편하다. 파이썬에서는 종종 이런 큐 자료구조를 이용해야 할 때, 기본적인 list 자료형에다 append와 pop(0) 메서드를 붙여서 간편하게 큐 자료구조를 흉내내 쓰곤 한다. List Implementation 예를 들어, 아래와 같이 먼저 빈 리스트 오브젝트를 하나 생성한 후 append를 호출해 리스트 맨 뒤에 새로운 원소를 추가할 수 있으며, 반대로 pop(0)을 호출해 리스트 맨 앞의 원소를 제거하고, 그 값을 반환..