Python 78

Shell file로 딥러닝 학습하기

딥러닝에는 다양한 하이퍼파라미터가 존재한다. 이때, Wandb의 Sweep을 사용하지 않고, 학습하고 싶은 경우에는 shell 파일을 통해 로그를 저장하면서 학습할 수 있다. 아래와 같이 learning rate, batch size, sequence length 등을 지정하고, 모델을 돌리게 된다면, 각 인자를 변환하면서 모델이 백그라운드로 실행되게 된다. for lr in 0.001 0.0001 0.00001 do for batch in 8 16 32 64 do for len in 64 128 256 512 do nohup python3 train.py --lr ${lr} --batch_size ${batch} --max_length ${len} &> logs/logs-${lr}-${batch}-${..

Python 2024.02.26

[Python] 패키지 버전 확인하기 with code

Contents 파이썬 내에서 패키지의 버전을 확인하는 방법은 다양하다. 간단하게 pip를 사용해서 확인할 수도 있으나, 코드를 통해 확인할 수도 있다. CLI 에서도 확인하는 것이 가능하고, Jupyter Notebook에서도 확인이 가능하다. 이번 글에서는 버전을 확인할 수 있는 다양한 방법에 대해서 알아볼 것이다. pip list pip list는 파이썬에 설치된 패키지의 버전을 확인할 수 있는 가장 기본적인 코드라고 볼 수 있다. 단점은 설치된 패키지가 한 번에 나오기 때문에 찾는 것이 어렵다는 것이다. # CLI pip list # Jupyter !pip list pip show 하나의 패키지에 대한 버전을 확인하고 싶은 경우에는 pip list 대신 pip show를 사용해서 효율적으로 찾는 ..

Python 2023.12.27

[프로그래머스] 정수 삼각형 - Python

7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 위와 같은 삼각형의 꼭대기에서 바닥까지 이어지는 경로 중, 거쳐간 숫자의 합이 가장 큰 경우를 찾아보려고 합니다. 아래 칸으로 이동할 때는 대각선 방향으로 한 칸 오른쪽 또는 왼쪽으로만 이동 가능합니다. 예를 들어 3에서는 그 아래칸의 8 또는 1로만 이동이 가능합니다. 삼각형의 정보가 담긴 배열 triangle이 매개변수로 주어질 때, 거쳐간 숫자의 최댓값을 return 하도록 solution 함수를 완성하세요. 위 형태로 Triangle을 구성하면 [[7], [3, 8], [8, 1, 0], [2, 7, 4, 4], [4, 5, 2, 6, 5]] 가 된다. 먼저 문제를 풀기 전에 Index Error가 발생하지 않도록 각 행의 양 옆에 [0]을 P..

Python/Algorithm 2023.12.27

[프로그래머스] 큰 수 만들기 - Python

문제 설명 어떤 숫자에서 k개의 수를 제거했을 때 얻을 수 있는 가장 큰 숫자를 구하려 합니다. 예를 들어, 숫자 1924에서 수 두 개를 제거하면 [19, 12, 14, 92, 94, 24] 를 만들 수 있습니다. 이 중 가장 큰 숫자는 94 입니다. 문자열 형식으로 숫자 number와 제거할 수의 개수 k가 solution 함수의 매개변수로 주어집니다. number에서 k 개의 수를 제거했을 때 만들 수 있는 수 중 가장 큰 숫자를 문자열 형태로 return 하도록 solution 함수를 완성하세요. 제한 조건 number는 2자리 이상, 1,000,000 자리 이하인 숫자입니다. k는 1이상, number의 자릿수 미만인 자연수입니다. 해당 문제는 탐욕법(Greedy) 방식으로 접근하는 문제다. d..

Python/Algorithm 2023.12.27

[Wandb] Wandb 사용법 + Sweep with Pytorch

Contents Weight & Biases Wandb (Weight & Biases)는 MLOps 플랫폼이며, 딥러닝을 학습하기 위해 필요한 기능들을 제공한다. wandb.ai 에서 회원가입을 하게 되면 API 키를 발급받을 수 있다. 해당 API를 통해 wandb에 login하면 사용할 수 있다. pip install wandb wandb.login() Wandb init Wandb를 사용하기 위해서는 처음에 init을 설정해주어야 한다. 기본적으로 하이퍼 파라미터(Hyper-Paramters)들은 Yaml로 관리하는 것이 편하기 때문에 아래와 같이 사용했다. learning_rate: 1e-5 batch_size: 64 epochs: 10 import yaml def load_yaml(path): ..

Python 2023.12.21

[프로그래머스] 방문 길이 - Python

해당 문제는 Summer/Winter Codding(~2018)에 출제된 문제로 Level 2에 해당한다. 11 by 11 Matrix로 구성된 좌표 평면에서 캐릭터가 이동하고, 캐릭터가 지나간 길 중 처음 걸어본 길의 길이를 구하는 문제다. 입력이 'ULURRDLLU'로 주어졌다면, 아래와 같이 그려볼 수 있고, 8과 9에 해당하는 이동은 처음 걸어본 길이 아니기 때문에 빼고 값은 7이 된다. 두 번째 예시의 경우, 벽에 붙은 경우에는 이를 무시한다. 해당 문제는 좌표 평면 + 집합으로 계산하면 쉽게 해결이 가능하다. 집합을 통해 시작 지점과 끝 지점을 양방향 그래프, 무향 그래프로 표현하고 전체 길이에서 2를 나누게 되면 처음 방문한 거리가 나온다. 만약에 문제에서 방향 까지 고려한다고 했으면, 코드..

Python/Algorithm 2023.11.23

[프로그래머스] 더 맵게 - Python

섞은 음식의 스코빌 지수 = 가장 맵지 않은 음식의 스코빌 지수 + (두 번째로 맵지 않은 음식의 스코빌 지수 * 2) 처음 문제를 접근했을 때는 아래와 같이 deque으로 접근했다. deque으로 접근하게 되면, 매번 Sorted를 통해서 정렬을 해주어야 하기 때문에 시간 초과가 발생했다. from collections import deque def solution(scoville, K): scv = deque(sorted(scoville)) cnt = 0 while min(scv) < K: cnt += 1 x, y = scv.popleft(), scv.popleft() scv.append(x + y*2) scv = deque(sorted(scv)) if len(scv) == 1: return -1 r..

Python/Algorithm 2023.11.22

[프로그래머스] 피로도 - Python

해당 문제는 DFS로 해결이 가능하다. DFS 는 깊이 우선 탐색으로, 한번에 던전을 갈 수 있는 끝까지 탐색한 후 이전 단계로 돌아가는 작업을하면 된다. 이때, 방문 여부와 방문 횟수를 초기화하고 다시 탐색을 하면 끝이다. answer = 0 def solution(k, dungeons): global answer def DFS(k, cnt, dungeons, visited): global answer answer = max(answer, cnt) # 최대 방문 횟수 for i in range(len(dungeons)): if visited[i] == 0 and k >= dungeons[i][0]: visited[i] = 1 # 방문 DFS(k-dungeons[i][1], cnt+1, dungeons,..

Python/Algorithm 2023.11.22

[프로그래머스] 의상 - Python

해당 문제는 Level 2에 해당하는 문제로, "해시"로 분류된 문제다. 조합 공식을 이용해 아래와 같이 쉽게 풀이할 수 있다. from collections import defaultdict def solution(clothes): inform = defaultdict(list) answer = 1 for cl in clothes: k, v = cl inform[v] += [k] for k in inform.keys(): n = len(inform[k]) answer *= (n + 1) return answer - 1 모든 의상에 대해서 가지고 온 후, 모든 조합을 계산한다. 이때 모든 조합이란, 옷을 아무것도 입지 않는 경우도 포함하는 것이다. 그렇기 때문에 마지막에 -1을 해주어서 값을 도출하면 된다.

Python/Algorithm 2023.11.16

[프로그래머스] n^2 배열 자르기

프로그래머스 월간 코드 챌린지 3에 출제된 Level 2 난이도의 문제다. 초기 풀이는 extend를 활용해서 아래와 같이 작성하였다. def solution(n, left, right): ans = [] for i in range(n): l = list(range(i+1, n+1)) ans.extend([l[0]]*(n-len(l)) + l) return ans[left:right+1] 일부 케이스에서는 통과가 되었으나, 시간 초과가 발생한다. list를 생성하고 extend하는 과정에서 오래 걸리는 것으로 확인된다. 시간 복잡도를 줄이기 위해 몫, 나머지 개념을 도입했다. (0, 0) (0, 1) (0, 2) (1, 0) (1, 1) (1, 2) (2, 0) (2, 1) (2, 2) 1 2 3 2 2..

Python/Algorithm 2023.10.23
반응형