전체 글 23

[파이썬] 'is' 와 '=='

파이썬에서는 비교할 때, is와 ==를 사용한다. 이 차이는 is는 가리키는 객체(Object)가 같다면 True ==는 가리키는 값(value)가 같다면 True 즉, 가리키는 값이 같더라도 객체가 다르다면 is에서는 False, ==에서는 True가 나온다. a = [1] b = a c = [1] print(a is b)# True. 참조하는 객체가 같음. print(a is c)# False. 참조하는 객체가 다름. print(a == b)# True. 참조하는 값이 같음. print(a == c)# True. 참조하는 값이 같음. 여기서 알 수 있는 사실은, 대입 연산자 =를 이용해 b에 a를 대입하면, 같은 객체를 가리킨다는 사실이다. linked list나, 객체 참조를 할 경우에는 비교 연산..

CS/Python 2021.08.18

[파이썬] 이중 리스트 초기화 방법

이중 리스트를 사용할 일이 많다. 코딩 테스트라던지, 텐서라던지. 파이썬에서 이중 리스트를 초기화 및 입력받는 방법을 알아보자. 여러 방법이 있지만, 가장 간결한 방법만을 소개하겠다. arr = [[1,2,3],[4,5,6]] 이라고 할 때, 이를 보기 쉽게 표현하자면 [ [1, 2, 3], [4, 5, 6] ] 으로 표현할 수 있다. arr[0] = [1, 2, 3]이고, arr[1] = [4, 5, 6]이다. 결국 총 2행 3열의 리스트를 만들고 싶을 때에는 arr = [ [0 for col in range(2)] for row in range(3) ] 이다. [ 0, 0 ] 으로 이루어진 (col의 개수만큼 요소가 있는) 1차원 리스트를 row 개수만큼 만들어 2차원 리스트에 저장한다. 입력을 받을..

CS/Python 2021.08.18

[알고리즘] 시간복잡도와 공간복잡도

알고리즘을 공부하는 목표는 효율적인 알고리즘을 작성하기 위함에 있다. 효율적인 알고리즘은 수행을 시작하여 결과가 도출될 때까지 걸리는 시간이 짧고, 연산하는 컴퓨터 내의 자원(메모리 등)을 덜 사용하는 알고리즘이다. 일단 문제를 해결하는 것 말고도 더 빨리되고, 메모리를 덜 잡아먹는 알고리즘이 효율적이라는 소리이다. 시간 복잡도(Time Complexity) 시간 복잡도는 알고리즘을 수행하는 데 연산들이 몇 번 이루어지는 지를 숫자로 표기한다. 여기서 말하는 연산은 산술, 대입, 비교, 이동을 말한다. 연산은 보통 입력 데이터에 따라 변하므로 입력 데이터 N개를 기준으로 시간복잡도를 표현한다. 예시 # Case 1 sum = N * N # Case 2 sum = 0 for i in range(N): su..

CS/Algorithm 2021.08.16

[파이썬] String Formatting (f-string)

파이썬에서는 여러가지 formatting 방법이 있다. % formatting: 오래된 스타일의 formatting 방법 String formatting: 새로운 스타일의 formatting 방법 f-string: Python 3.6 이상에서 사용할 수 있는 새로운 스타일의 formatting 방법 그냥 f-string을 쓰자. 예시 temperature = 202 measure = 'Fahrenheit' print('Water boils at %d degrees %s' % (temperature, measure)) # % formatting print('Water boils at {} degrees {}'.format(temperature, measure)) # String formatting prin..

CS/Python 2021.08.16

[알고리즘] 소수 판별 알고리즘(파이썬)

소수 판별 알고리즘에 대해서 정리할 필요성을 느껴 정리해본다. 소수(Prime Number)란 1보다 큰 자연수 중에서 1과 자기 자신을 제외한 자연수로는 나누어떨어지지 않는 자연수이다. 가장 기본적인 소수 판별 함수 # 1. 가장 기본적인 소수 판별 함수 def is_prime_number(x): # 2부터 (x - 1)까지의 모든 수를 확인하며 for i in range(2, x): # x가 해당 수로 나누어떨어진다면 소수가 아니다. if x % i == 0: return False # 나누어지지 않고 반복문이 끝나면 소수이다. return True print(is_prime_number(4)) # 4는 소수가 아님 print(is_prime_number(7)) # 7은 소수임 2부터 x -1 사이에..

CS/Algorithm 2021.08.16

[파이썬] 값에 의한 호출, 참조에 의한 호출(call by value, call by reference)

파이썬에서는 리스트를 호출하는 방식이 두 가지 있다. 하나는 값에 의한 호출(call by value), 다른 하나는 참조에 의한 호출(call by reference)이다. 값에 의한 호출은 해당 객체의 값 그 자체를 참조하며, 참조하는 객체의 값이 변해도 호출하는 객체의 값은 변하지 않는다. 값에 의한 호출은 immutable(불변한) 객체에 대하여 결정이 된다. 불변하는 객체는 int, float 등의 일반적인 자료형과 값을 변경할 수 없는 tuple이 해당한다. 그에 반해 참조에 의한 호출은 참조당하는 객체가 변하면 호출하는 객체도 따라 변한다. 참조에 의한 호출은 mutable(가변한) 객체에 대하여 결정되며, 가변하는 객체는 list, dictionary 등의 자료형이 속한다. 그렇다면 기존의..

CS/Python 2021.07.26

마크다운(Markdown)

최근부터 깃허브를 자주 쓰고 있는 와중, README.md 파일이 무슨 의미인지 잘 몰랐다. 이름부터가 '나를 읽어줘' 인데, 그냥 사용 설명서라고만 생각했다. 대부분의 사람들과 다를 바 없이 나는 이러한 사용 설명서를 잘 읽지 않고 넘어갔는데, 최근에서야 이 사용 설명서가 중요하다는 걸 깨달았다. 연구실에서 같이 공부를 하는 친구가 마크다운 공부해보라는 소리를 해서도 있고. 그래서 마크다운 문법을 정리해보려고 한다. 이 글은 해당 깃허브를 출처로 하여 작성하는 글이다. 마크다운이란? Markdown은 텍스트 기반의 마크업언어로 2004년 존그루버에 의해 만들어졌으며 쉽게 쓰고 읽을 수 있으며 HTML로 변환이 가능하다. 특수기호와 문자를 이용한 매우 간단한 구조의 문법을 사용하여 웹에서도 보다 빠르게 ..

CS 2021.07.22

딥 러닝: 합성곱 신경망(Convolution Neural Network, CNN)

합성곱(Convolution)은 과거부터 컴퓨터 비전(Computer Vision, CV) 분야에서 많이 쓰이는 이미지 처리 방식으로 계산하는 방식은 아래와 같다. 합성곱은 입력데이터와 필터의 각각의 요소를 서로 곱한 후 다 더하면 출력값이 된다. element-wise 방식이라고도 한다. 1*2 + 2*0 + 3*1 + 0*0 + 1*1 + 2*2 + 3*1 + 0*0 + 1*2 = 15이다. 이렇기 때문에 4x4(입력 데이터) * 3x3(필터) = 2x2(결과)가 나온다. Input 데이터를 convolution 연산을 한다. 이렇게 뽑아낸 feature map들의 차원을 축소시켜 핵심을 뽑아낸다(subsampling). 이후 convolution, subsampling을 반복하여 차원을 줄인다. 이..

CS/ML DL 2021.07.18

딥 러닝: 기울기 소실과 폭주 (Gradient Vanishing / Exploding)

MLP를 학습시키는 방법에서 역전파(Backpropagation)가 있었다. 역전파는 출력층(output layer)에서 입력층(input layer)으로 거꾸로 오차 그래디언트(gradient)를 흘려보내며 각 뉴런의 입력값에 대한 손실함수의 그래디언트를 계산한다. 이렇게 계산된 그래디언트를 경사 하강법 단계에서 각 가중치 매개변수(W, b)를 업데이트 해준다. 하지만 위의 그림처럼 hidden layer가 많으면 많을수록 오차 그래디언트가 작아져 결국 가중치 매개변수가 업데이트되지 않는데, 이를 그래디언트 소실, 기울기 소실(gradient vanishing)이라고 한다. 이와 반대로 오차 그래디언트가 너무나 커져 오차가 무한대로 갈 경우, 학습이 되지 않아 이를 기울기 폭주(gradient expl..

CS/ML DL 2021.07.18

딥 러닝: 딥러닝 주요 스킬

Data augmentation(데이터 증강) overfitting을 해결하는 가장 좋은 방법은 데이터 개수를 늘리는 것이다. 실제적으로 수집하는 데이터의 양이 한정되어 있으므로 이런 data augmentation 기법을 사용한다. 주로 이미지 처리 분야의 딥러닝에서 사용하는 기법이다. Dropout(드랍아웃) 각 Batch마다 랜덤한 노드를 끊어, 다음 노드로 전달할 때 랜덤하게 출력을 0으로 만든다. "사공이 많으면 배가 산으로 간다"라는 속담처럼 overfitting이 발생했을 때 적당한 노드들을 탈락시켜 더 좋은 효과를 낼 수 있다. 고양이를 판별하는 모델에서 전문가(노드)가 너무 많다고 가정할 때, 이들 중 일부만 사용해도 충분한 결과를 낼 수 있다. 이들 중에서 충분한 만큼의 노드들만 선출해..

CS/ML DL 2021.07.13