Posts by Category

effective_python

Effective Python C3. None보다는 예외를 반환

3 분 소요

Introduction 파이썬 개발자들은 처리가 실패하거나 처리할 값이 없을 경우 None을 반환하는 코드를 짜기도 한다. 그러나 None을 반환하도록 하면, 조건문에서 0, 빈문자열도 동일한 결과를 내므로 버그를 일으키기 쉽다. 또한 어떤 오류가 발생했는지도 알기 어렵다. ...

Effective Python C2. 정렬 시 key 파라미터 사용.

2 분 소요

Introduction int나 str로 이루어진 list는 따로 기준을 설정하지 않아도 정렬이 가능하다. 기본적으로 숫자는 작은 수부터 큰 수대로 정렬되고, str은 사전순으로 정렬된다. sort 또는 sorted 메소드는 리스트의 원소를 여러 기준으로 정렬할 수 있도록 ke...

Effective Python C2. 나머지를 모두 잡아내는 언패킹

3 분 소요

Introduction 기본 언패킹의 경우 시퀀스의 길이를 알아야 사용할 수 있다는 단점이 있다. 예를 들어, fruits = ['apple', 'grape', 'banana', 'melon'] first_fruit, second_fruit = fruits 위와 같은 코드는 길이...

Effective Python C1. Pythonic(8) - zip의 사용

2 분 소요

Introduction 파이썬에서 객체가 들어있는 리스트를 다수 다루는 경우가 많으며, 리스트 컴프리헨션을 사용하면 소스 list에서 새로운 list를 파생시키기 쉽다.

Effective Python C1. Pythonic(7) - range보다는 enumerate를 사용하라

1 분 소요

Introduction range 내장 함수는 일정 범위의 정수 집합을 이터레이션하는 루프가 필요할 때 쓰인다. 그러나 특정 이터러블 객체를 인덱싱하면서 동시에 그 값에 접근하고자할 때는 enumerate가 쓰일 수 있다. Best WAY 7 : range보다는 enumerate를...

Effective Python C1. Pythonic(4) - 형식 문자열은 f-string을 사용하라

최대 1 분 소요

Introduction 형식화는 미리 정의된 문자열에 데이터 값을 끼워 넣어서 사람이 보기 좋은 문자열로 저장하는 과정이다. 파이썬에서는 언어의 내장된 기능과 표준 라이브러리를 통해 네 가지 방식으로 형식화할 수 있다. 그러나 f-string을 제외하고는 여러 단점에 있어 f-s...

Effective Python C1. Pythonic(2) - PEP 8 스타일 가이드를 따르라

5 분 소요

Introduction PEP란 파이썬 개선 제안(Python Enhancement Proposal)을 의미하며 파이썬 코드를 어떻게 작성하는 것이 좋은지 알려주는 스타일 가이드이다. 이번 포스팅에서는 제일 중요한 스타일 가이드인 PEP8에 대해 정리하였다.

맨 위로 이동 ↑

python_lib

문자열 매칭을 위한 정규식 라이브러리 (re)

7 분 소요

Introduction 크롤링을 하거나, NLP 전처리로 인해 문자열의 특정한 패턴을 찾아야 하는 경우가 있다. 파이썬에서는 find라는 문자열 검색 메소드를 기본으로 지원한다. 문제는 하나의 문자열의 인덱스만을 반환한다. ```python pattern = “node” st...

추상 베이스 클래스 (abc)

1 분 소요

abc(추상 베이스 클래스)는 인터페이스를 정의하는 방법을 제공하면서 덕타이핑을 보완한다. 추상 클래스를 상속하는 클래스들에게 조건에 맞게 동작해야 하는 추상 함수를 강제 구현하도록 지시한다. 일반적인 의미에서 추상 클래스는 하나 또는 하나 이상의 추상 메소드(들)을 포함한다....

XML 파싱 및 수정을 위한 파이썬 내장 라이브러리 (xml)

4 분 소요

XML은 hierachical 데이터 형식이고 이를 나타내는 방법은 일반적으로 트리가 있다. elementTree는 이 목적을 달성하기 위해 두 가지 클래스를 가진다. ElementTree는 전체 XML 문서를 트리로 나타낸다. Element는 트리에 있는 단일 노드를 나...

파일 압축풀기를 위한 파이썬 라이브러리 (tarfile)

2 분 소요

CLI로 작업 새 tar 아카이브 만들기 : -c tarfile을 실행하고 -c 뒤에 아카이브 이름을 지정하고 포함해야 하는 파일 또는 디렉터리를 나열. python -m tarfile -c monty.tar spam.txt eggs.txt # files python -m ta...

파일 접근을 위한 파이썬 라이브러리 (pathlib)

2 분 소요

기존에는 폴더에 있는 파일들을 접근하려면 os 라이브러리를 사용했다. 하지만, os는 문자열로 파일 및 폴더를 접근하기 때문에 객체로 좀 더 편리하게 접근하기 위해서는 pathlib를 사용해야 한다.

맨 위로 이동 ↑

pytorch

PyTorch Distributed(3) DDP

7 분 소요

Introduction DDP는 여러 machine(node)에서 실행할 수 있는 데이터 병렬 처리를 모듈 수준에서 구현한다. multi-process를 생성하고, process당 단일 DDP 인스턴스를 생성한다. DDP는 torch.distributed의 collective c...

PyTorch Distributed(2) DP

1 분 소요

Introduction DP는 one process & multi-gpu로 실행할 수 있는 데이터 병렬 처리를 모듈 수준에서 구현하는 패러다임을 말한다. 이 패러다임에 해당하는 모듈인 torch.nn.DataParallel은 일종의 컨테이너인데, 입력 데이터는 mini-b...

pytorch(6) model (nn.Module)

7 분 소요

Introduction pytorch로 커스텀 모델을 만들 수 있다. 커스텀 모델을 만들기 위한 nn.Module 사용법 등을 알아본다. Pre-question

pytorch(5) Transform

최대 1 분 소요

Pytorch 튜토리얼을 참고하였다. Transform 모델에 입력으로 적합하도록 데이터를 변형한다. 데이터가 이미 모델 입력으로 fit하면 추가적인 처리가 필요없으므로 필요하지 않다. 아래와 같이 datasets을 통해 데이터를 불러온 경우, feature를 처리하기 위한 tr...

pytorch(4) Dataloader, Dataset

5 분 소요

Introduction 파이토치로 만든 모델에 어떻게 데이터를 feeding할지 정해야 한다. 정해진 형식이 없다면, ML엔지니어들이 중구난방으로 feeding 방법에 대한 코드를 짤 것이다. 다행히도 파이토치는 Transform, Dataset, Dataloader라는 클...

pytorch(3) 모델의 autograd 방법

5 분 소요

Introduction DL 모델은 수많은 레이어가 마치 레고블럭처럼 조립되는 것과 같다. 조립을 위해서는 레이어의 특성과 효율적인 조립 방법을 알아야 한다. 또한 성능면이나 속도 면에서든 효율적인 추론을 위해 자동 미분의 핵심이 되는 optimizer를 어떻게 구성할 것인지 ...

pytorch(2) tensor control

8 분 소요

Introduction 이 포스팅은 Pytorch에서 많이 다뤄지는 텐서의 기본적인 지식과 텐서를 효과적으로 다루기 위한 방법을 기록하였다. 내용은 파이토치 튜토리얼과 네이버 ai 부스트캠프를 참고하였다.

pytorch(1) basic process

5 분 소요

Introduction 파이토치에서 DL을 구현하기 위한 전과정을 가볍게 확인해보자.

pytorch(0) introduction

2 분 소요

Introduction 파이토치는 딥러닝을 만드는데 기본이 되는 프레임워크로, 2022년 기준 모델 연구에 사용되는 DL 프레임워크 중 가장 많은 사용층을 보유하고 있다.

맨 위로 이동 ↑

ml_basic

(6) 시퀀스 데이터와 RNN 기초

4 분 소요

Introduction CNN은 weight sharing과 kernel size에 따른 locality 특성으로, image 데이터를 주로 다루는 CV task에서 좋은 성능을 내고 있다. 반면 부동산 가격이나 음성/문장 데이터와 같은 시퀀스 데이터의 경우에는 auto-reg...

(4) 통계학 기초, MLE

7 분 소요

Introduction 통계적 모델링은 적절한 가정 위에서 데이터에 대한 확률 분포를 추정하는 것이다. 이 포스트에서는 모수의 개념과 모수를 추정하기 위해 필요한 MLE에 대해 배운다.

(5) Bayes’ theorem

5 분 소요

Introduction 통계학에서 많이 응용되는 베이즈 이론에 대해 배워보고, 베이즈 이론의 한계와 머신러닝의 장점을 알아보자.

(3) 확률론 기초

5 분 소요

Introduction 기계 학습이론은 통계학에서 발전하였으며, 통계학은 확률론에 기본 뼈대를 둔다. 딥러닝에서 사용되고 있는 손실함수들은 모두 데이터 공간을 통계적으로 해석해서 유도한다. 이는 예측이 틀릴 위험을 최소화하도록 하기 위한 것이다. 예를 들면, 회귀함수에서...

(2) 활성함수와 순전파 및 역전파

5 분 소요

Introduction 선형회귀 모델에 대해 경사하강법을 이용해 최적의 계수를 찾는 과정을 진행했었다. 그러나, 대부분의 현실 문제는 선형회귀로는 설명이 되지 않는다. 비선형 문제를 풀기 위해 도입된 활성함수와 딥러닝의 기본적인 학습 방법에 대해 알아보자.

(1) 경사 하강법

6 분 소요

Introduction ML/DL에서 비용함수를 최소화시키기 위해 가장 기본이 되는 optimizer인 경사하강법(GD)과 이것에 파생된 방법들을 설명한다.

맨 위로 이동 ↑

C++

C++ 문법(6) 템플릿

1 분 소요

Introduction 템플릿은 매개변수의 타입에 따라 함수나 클래스를 다르게 생성하는 것이다. 자료형을 추상화한다고 생각해도 될 것 같다.

C++ 문법(5) 클래스

2 분 소요

Introduction 클래스의 멤버 변수를 프로퍼티(property), 멤버 함수를 메소드(method)라고도 한다. 멤버변수는 독립된 메모리공간에 저장되나, 멤버 함수는 모든 인스턴스가 공유한다.

C++ 문법(4) 변수 scope와 네임스페이스

3 분 소요

Introduction 네임스페이스를 알기 전에 미리 아래 개념들을 알아야 한다. scope 변수의 유효범위(scope)란 해당 변수가 사용될 수 있는 범위를 의미한다. linkage 연결은 해당 변수를 사용할 수 있는 파일의 접근 가능 여부를 나타낸다. 외부 연결을 가지는 ...

C++ 문법(3) 오버로딩

1 분 소요

Introduction 오버로딩이란 같은 기능을 수행하는 함수의 매개변수 형식만 달리해서 사용할 수 있도록 해주는 것이며, 객체 지향 프로그래밍 특징인 다형성을 만족하도록 한다. 함수 시그니처 시그니처란 함수의 원형에 명시되는 매개변수 리스트를 가리킨다.

C++ 문법(2) 참조자

3 분 소요

Introduction C++은 C에서 쓰인 문법들을 거의 계승하나, 몇 가지 새로운 기능이 추가되었다. C++에서 추가된 참조자(reference)는 특정 변수의 실제 이름 대신 사용할 수 있는 것으로, 크기가 큰 구조체와 같은 데이터를 함수에 인수할 때 클래스를 설계할...

맨 위로 이동 ↑

network

HTTP

2 분 소요

Introduction HTTP (HyperText Transfer Protocol)는 애플리케이션 계층에서 웹 서비스를 위한 프로토콜로 사용된다. HTTP의 종류와 특징에 대해 알아본다.

IP 주소

2 분 소요

Introduction IP 주소가 어떻게 구성되고, 어떻게 사용되는지 좀 더 자세히 알아보자.

네트워크 기기

5 분 소요

Introduction 보통 가정에 네트워크를 깔면 공인 ip는 하나만 사용한다. 추가로 공인 ip를 사용하면 돈이 꽤 든다고 한다. 또한 유선으로 받은 패킷 정보를 와이파이 등의 무선 통신으로 핸드폰에 날려줘야 할 때가 있다. 이외에도 기업마다 내부 인트라넷 구축을 위해서도 여러...

TCP/IP 모델

4 분 소요

Introduction 인터넷 프로토콜 스위트(Internet Protocol Suite)는 인터넷에서 컴퓨터들이 서로 정보를 주고받는 데 쓰이는 프로토콜의 집합이다. 보통 TCP/IP 4계층을 많이 쓰기 때문에, TCP/IP 4계층으로 이 프로토콜 집합을 설명한다. 아래는 ...

network basic

3 분 소요

Introduction 네트워크란 **노드와 링크가 서로 연결되어 있거나 연결되어 있지 않은 집합체이다. **노드는 서버, 라우터, 스위치 등의 네트워크 장비를 의미하고 링크는 유선 또는 무선을 의미한다. 구성할 수 있는 네트워크 토폴로지를 알아보고, 그에 따른 장단점과 네트...

맨 위로 이동 ↑

python

json 라이브러리

3 분 소요

Introduction json은 웹에서 데이터 통신을 할 때 주로 사용하는 텍스트 기반 데이터 포멧이다. 파싱 또는 직렬화가 없이도 javascript에서 사용할 수 있다. 다만, 데이터 포멧을 기술하기 위한 오버헤드가 큰편이다. 그래서 그런지 압축하면 용량이 잘 줄어든다. 파...

python의 예외처리 (try-except, assert)

2 분 소요

try-except는 파이썬 예외 처리 시 사용할 수 있다. try-except의 예외 처리를 위한 분기 try: # 실행내용 raise Exception("에러테스트") # 에러 발생시키기 except: # 에러 발생 시 분기 else : # 예외...

f-string을 이용한 문자열 표현

1 분 소요

F-string은 문자열에 f또는 F 접두어를 붙이고 표현식을 {expression} 형태로 작성해 문자열에 파이썬 표현식의 값을 그대로 삽입할 수 있도록 한다.

맨 위로 이동 ↑

sw_tool

파이썬 패키지 관리 시스템 (pip)

2 분 소요

pip는 파이썬 패키지 관리 시스템으로 Python Package Index(PyPI)라는 퍼블릭 패키지와 기본적으로 연결되어 있다. 그러나 다른 패키지 저장소에서도 찾아 설치할 수 있다.

맨 위로 이동 ↑

linux

GUI 원격작업을 하기 위한 X-window 사용

4 분 소요

Introduction 리눅스 서버를 다룰 경우 보통 CLI 환경에서 작업을 많이 한다. 하지만 부득이하게 GUI 환경이 필요한 상황이 있다. 특히 QT를 사용하거나 해야할 떄, 테스트해야할 프로그램이 무조건 GUI 환경을 요구하는 경우, CLI만 지원하는 개발 환경에서는 아래와 ...

Shell Script 문법

1 분 소요

셸 스크립트는 쉘에게 명령할 일련의 스크립트를 적은 sh 확장자 파일을 의미한다.

Shell 기초 및 명령어

8 분 소요

셸은 커널에 명령을 전달하기 위한 사용자 인터페이스 역할을 한다. 셸 명령어는 실제로 커널에 실행할 내용을 의미한다. 여기서는 리눅스 표준 쉘인 bash shell을 기준으로 주로 설명한다.

맨 위로 이동 ↑

docker

Docker(4) - Dockerfile 작성

3 분 소요

Introduction docker Image를 빌드하기 위한 정보를 설정해주는 Dockerfile 작성 방법을 알아본다.

맨 위로 이동 ↑

OS

OS - Thread와 Process

14 분 소요

Introduction 이전 포스팅에서 컴퓨터 구성 요소를 하드웨어(CPU, DMA 등)와 소프트웨어(유저프로그램, 커널, 시스템 콜 등) 및 메모리 자원(레지스터, 캐시, 주메모리 등)에 대한 전반적인 설명을 하였다. 실제로 이것들이 어떻게 유기적으로 사용되는지 알기 위해서는...

OS - 메모리

4 분 소요

Introduction CS 노트에서 CPU는 메모리에 올라와 있는 프로그램의 명령어를 수행할 뿐이며, 메모리 관리에 따라 컴퓨팅 성능이 매우 차이날 수 있다는 것을 알려준다. 메모리를 어떻게 관리하느냐는 개발자에게도 매우 중요한 이슈 중 하나이기도 하다.

OS 기초

2 분 소요

참고 OS의 기초적인 내용만 써두었고, 필요 시 내용 추가 예정인 글이다.

맨 위로 이동 ↑

database

Database - 트랜잭션과 무결성

5 분 소요

Introduction 데이터베이스를 구성한 뒤, 효율적인 처리와 이상 현상 제거를 위해 정규화를 진행하고 본격적으로 데이터베이스를 사용할 준비가 되었다고 하자. 데이터베이스에 접근하기 위해서는 쿼리를 사용하여야 한다. 실제로 의미있는 작업을 하기 위해서는 여러 개의 쿼리를 묶어...

Database - 정규화

5 분 소요

Introduction 관계형 데이터베이스의 설계에서 중복을 최소화하게 데이터를 구조화하는 프로세스를 정규화라고 한다. 아래와 같은 장점을 가진다. 릴레이션 간의 잘못된 종속 관계로 데이터베이스 이상 현상이 일어나 이를 해결함. 저장 공간을 효율적으로 사용.

Database - basic

4 분 소요

Introduction 데이터베이스는 일정한 규칙 혹은 규약을 통해 구조화되어 저장되는 데이터의 모음이다.

맨 위로 이동 ↑

design_patterns

programming paradigm

7 분 소요

Introduction 프로그래밍 패러다임은 프로그래밍을 어떤 원칙으로 할지 정하고, 이 원칙에 따른 설계 관점을 프로그래머가 갖출 수 있도록 하는 개발 방법론이다.

design patterns overview

7 분 소요

Introduction 디자인 패턴이란? 프로그램 설계 시 객체 간 상호 관계 등을 어떻게 구현할지 규약(패턴)을 만들어 놓는 것이다. 정해진 규약대로 설계함으로써, 프로그램에서 발생하는 여러 문제들을 회피하고 유지-보수를 용이하게 해준다.

맨 위로 이동 ↑

nlp_engineering

한국어 텍스트 전처리 활용 (filtering)

4 분 소요

Introduction 이전 포스팅에서 텍스트 전처리 라이브러리 사용법을 익혔다. 이번 포스팅에서는 라이브러리 기능보다는, nlp 모델 성능을 높이기 위해 필요한 텍스트 전처리(필터링) 방법들에 대해 서술한다. 이전 포스팅과 일부 겹치는 내용이 있을 수 있고, 부실하게...

한국어 텍스트 전처리 라이브러리 사용법

7 분 소요

Introduction 한국어 데이터를 처리하기 위한 파이썬 패키지가 매우 다양하다. 이 포스팅에서는 유용하게 사용가능한 한국어 데이터 전처리 파이썬 패키지를 소개한다. re : 정규화식을 이용한 전처리, -> 기본 사용법은 파이썬 라이브러리 포스팅에서 다뤘음. Ko...

맨 위로 이동 ↑

paper

맨 위로 이동 ↑

pycharm

pycharm shortcut

1 분 소요

키보드 커서를 바로 다음 줄로 이동 Shift + Enter 한 문장 또는 여러 문장 한 번에 주석 처리 Ctrl + / 모듈 바로 설치 모듈에 빨간줄 그어져 있으면, 커서를 둔 뒤 단축키를 입력한다. import keras 다중 키보드 커서 Shift + Alt + 마우스...

맨 위로 이동 ↑

dataset

맨 위로 이동 ↑

anaconda

anaconda 명령어

2 분 소요

아래는 딥러닝 비전 오픈소스 프로젝트중 하나인 open-mmlab을 사용하기 위한 개발 라이브러리들을 conda를 이용해

맨 위로 이동 ↑

git

git tutorial(1) (push, pull, merge)

8 분 소요

Introduction git은 분산 버전 관리 시스템으로, 아래는 local에 git repository를 내려받고 사용하기 위한 기초적인 사용 흐름이다. 이 흐름만 알면 혼자 git을 사용할 때는 무리없이 사용할 수가 있다. git hosting tool (bitbuck...

맨 위로 이동 ↑