no image
Convolution과 Stationarity, Locality 가정
Summary CNN(Convolutional Neural Networks)이 이미지 처리에 많이 활용되는 이유는, 이미지 데이터에 적합하도록 설계 됐기 때문이다. 실제로 CNN은 이미지 데이터의 stationarity of statistics, locality of pixel dependencies 가정을 고려하여 설계 됐다. Locality 가정은 커널 단위 연산을 통해, Stationarity 가정은 연산 과정에 Convolution(Cross-correlation)을 사용하여 만족한다. 결국 CNN의 이름에도 적혀 있는 Convolution 연산이 이미지와 너무 잘 맞아서, 성능도 잘 나오고 많이 활용되는 것이다. 이 포스팅에선 Convolution 연산이 무엇인지는 다루지 않고, 왜 Convol..
2022.12.27
no image
[FSDL 정리] 머신러닝 프로젝트 테스트(Testing) 하기 : 코드 영역
Testing(테스트)이 무엇이고 왜 필요한가요? 코드에 버그가 있는지 확인하는 작업을 Testing(테스트)라고 한다. 테스트는 코드가 가지고 있는 문제점을 프로젝트에 적용하기 전에 미리 확인할 수 있다는 점에서, 프로젝트 유지 보수에 큰 도움이 된다. 따라서 테스트를 잘하는 것은 프로젝트 성공에 매우 중요한 요소 중 하나이다. 성공적인 테스트를 위해선 우선 테스트 통과 여부와 버그 발생 여부가 항상 100% 관련 있지 않다는 점을 알아야 한다. 실제로 테스트를 통해서 확인할 수 있는 것은 단순히 '정해둔 테스트 케이스 조건을 지켰는지'이다. 결국 테스트의 효과를 극대화하기 위해선 테스트 케이스를 잘 설정하는 것이 중요하다. 그럼 어떻게 테스트 케이스가 설정 됐을 때 '잘' 됐다고 말할 수 있을까? 답..
2022.12.21
no image
[FSDL 정리] 분산 학습(Distributed Training) 알아보기
Full Stack Deep Learning - Lecture 2: Development Infrastructure & Tooling Software engineering, Deep learning frameworks, Distributed training, GPUs, and Experiment Management. fullstackdeeplearning.com 모든 사진과 글은 위 링크를 참고했습니다. 분산 학습 모델 파라미터와 데이터 배치의 메모리 사용량이 크지 않다면, 1개의 GPU로 모델 학습을 진행하면 된다. 만약 그렇지 않은 경우엔 여러 GPU를 동시에 활용하는 분산 학습을 활용한다. Data Parallelism(DP) DP란 1개의 GPU로 모델 파라미터는 저장할 수 있지만, 데이터 배치까..
2022.12.19
no image
[FSDL 정리] 머신러닝 프로젝트 진행 시 고려 사항
Full Stack Deep Learning - Lecture 1: Course Vision and When to Use ML Introduction to planning, developing, and shipping ML-powered products. fullstackdeeplearning.com 모든 사진과 글은 위 링크를 참고했습니다. ML은 언제 활용해야 할까 머신러닝 프로젝트는 연구적 성향이 강하기 때문에 다른 소프트웨어 프로젝트와 비교 했을 때 실패 확률이 높다. 또한 많은 양의 데이터를 처리하기 위해 시스템이 복잡해져 유지 보수 과정에 큰 비용이 든다. 따라서 머신 러닝을 프로젝트에 도입하기 전엔, 다음과 같은 사항을 고려해 정말 필요한 지 따져 보고 도입하는 것이 중요하다. 정말 사용할 ..
2022.12.18
no image
Statistical Estimator(통계적 추정량)의 특성 알아보기
Estimator(추정량)이란? 추정량은 추정과 관련된 값이다. 그래서 우선 추정에 대해서 간단하게 알아보자. 추정은 표본을 활용해 모집단의 특성을 나타내는 값인, 모수(Parameter)를 추측하는 과정을 의미한다. 추정엔 특정한 값을 추측하는 점 추정과, 점 추정의 변동을 고려해 모수를 포함할 가능성이 높은 구간을 추측하는 구간 추정이 있다. 이러한 추정엔 결국 기준이 되는 값이 필요한데, 그것을 바로 추정량이라고 부른다. 추정은 다양한 추정량 중, 어떤 추정량을 활용할 것인지가 중요하고, 이에 따라 바람직한 추정량의 특성 또한 존재한다. 일반적으로 사용하면 좋은, 바람직한 추정량의 특성으로 Unbiasedness(불편성), Efficiency(효율성), Consistency(일치성), Suffici..
2022.11.30
no image
[파이썬] 백준 연산자 끼워넣기
14888번: 연산자 끼워넣기 첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수, www.acmicpc.net 나의 풀이 +, -,*, / 연산자 각 원소의 개수에 맞춰서 인덱스 리스트를 만들어서 저장했다. 이후 인덱스 리스트로 순열을 만들어서 완전 탐색을 진행해서 풀었다. 순열을 직접 구현하고 사용해보려고 이런 방식으로 풀었는데, itertools의 permutations 함수를 사용하면 통과가 되지만 구현한 수열 함수로는 시간 초과가 발생한다. def get_perm(arr, n): perm_list = [] # ..
2022.11.11
no image
[파이썬] 순열과 조합 직접 구현하기
조합 def get_comb(arr, n): comb_list = [] # 종료 조건 if n == 0: return [[]] # 현재 arr의 담긴 수를 확인 for i in range(len(arr)): # 선택된 수 num = arr[i] # 나머지 수로 구성된 배열 arr_left = arr[i+1:] for comb in get_comb(arr_left, n - 1): comb_list.append([num] + comb) return comb_list 순열 def get_perm(arr, n): perm_list = [] # 종료 조건 if n == 0: return [[]] # 현재 arr의 담긴 수를 확인 for i in range(len(arr)): # 선택된 수 num = arr[i] ..
2022.11.11
no image
[파이썬] 백준 퇴사
14501번: 퇴사 첫째 줄에 백준이가 얻을 수 있는 최대 이익을 출력한다. www.acmicpc.net 나의 풀이 오랜만에 푸는 DP 문제이다. 고민하다가 못 풀어서 결국 풀이를 참고했다. 각 날짜 별 최대 이윤을 DP 테이블로 구성하고, 최대 이윤 값을 얻을 땐 뒤쪽 날짜부터 거꾸로 진행해서 계산해야 한다. 이렇게 되면 DP[i] = max(현재 상담 일자의 최대 이윤 + 현재 상담이 끝난 후를 기준으로 한 최대 이윤, 기존 최댓값)으로 표현이 가능하다. n = int(input()) # 전체 상담 개수 t_list = [] # 상담 완료까지 기간 p_list = [] # 상담 완료 시 받을 수 있는 금액 dp = [0] * (n + 1) max_value = 0 for _ in range(n): t..
2022.11.10
no image
[파이썬] 백준 시험감독
13458번: 시험 감독 첫째 줄에 시험장의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 각 시험장에 있는 응시자의 수 Ai (1 ≤ Ai ≤ 1,000,000)가 주어진다. 셋째 줄에는 B와 C가 주어진다. (1 ≤ B, C ≤ 1,000,000) www.acmicpc.net 나의 풀이 우선 총 감독을 1명씩 배치하고, 이후 보조 감독을 배치했다. 보조 감독 배치는 몫의 값 만큼 진행하고, 나머지가 0이 아닌 경우 1명씩 추가로 배지했다. import sys N = int(input()) A_list = list(map(int, sys.stdin.readline().split())) B, C = map(int, input().split()) # 총 감독 배치 answer = 0 ..
2022.11.08
SQL 테스트 대비
기본 연산 [ic]SUM[/ic], [ic]COUNT[/ic], [ic]AVG[/ic] : 합, 개수, 평균 [ic]ROUND[/ic](숫자, 반올림할 자릿수) : 자릿수를 기준으로 반올림 [ic]TRUNCATE[/ic](숫자, 버림할 자릿수) : 자릿수를 기준으로 버림 [ic]CEIL[/ic], [ic]FLOOR[/ic] : 정수화(올림, 버림) [ic]POW[/ic], [ic]SQRT[/ic] : 거듭 제곱, 제곱근 The Blunder | HackerRank Query the amount of error in Sam's result, rounded up to the next integer. www.hackerrank.com SELECT CEIL(AVG(SALARY) - AVG(REPLACE(CAST..
2022.11.04
no image
[파이썬] 프로그래머스 주식가격
문제 확인 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 나의 풀이 완전 탐색으로 풀면 시간 복잡도가 $O(N^2)$이기 때문에, 다른 방법으로 접근했다. 우선, 가격이 떨어지지 않는 경우를 가정해서 초기 [ic]answer[/ic]를 설정했다. 이후 가격이 떨어진다면, 현재 시간과 해당 prices 값이 입력된 시간 사이 차이를 계산해 answer 값을 수정해야 했다. '어떻게 구하지?'라고 고민하다가 결국 다른 사람 풀이를 참고했다. # 가격이 떨어지지 않은 기간 # '초기화 - 갱신'을 어떤 방식으로 할 지 고민 # [1] -> [1, 2] -> [..
2022.11.04
no image
[파이썬] 프로그래머스 다리를 지나는 트럭
프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 나의 풀이 트럭이 진입한 시간, 다리 위에서의 무게를 계산하는 과정에서 pop(0)가 많이 발생하므로 Queue를 활용했다. 트럭이 막 진입한 시간을 0초, 진입 후에 1초가 된다는 생각으로 answer 값을 활용했다. from collections import deque def solution(bridge_length, weight, truck_weights): truck_weights = deque(truck_weights) # 다리에 트럭이 진입한 시간 time_list = deque() # 현재 다리 ..
2022.11.04