본 글은 네이버 부스트 캠프 AI Tech 기간동안
개인적으로 배운 내용들을 주단위로 정리한 글입니다
본 글의 내용은 새롭게 알게 된 내용을 중심으로 정리하였고
복습 중요도를 선정해서 정리하였습니다
✅ Week 1
목차
- Lambda, map, reduce
- decorate
- logging Handling
- logging
- configparser, argparser
- 정규식
- numpy
- shape handling
- pandas
✅lambda, map, reduce (복습 중요도 : ⭐⭐)
✔️lambda
- 함수 이름 없이 - ex) def ~~~, 함수처럼 쓸 수 있는 익명 함수
#일반적으로 함수를 활용해서 뺄셈 기능을 구현한다고 한다면
def minus(x , y):
return (x - y)
#함수 사용
print(minus(10, 5)
>> 5
이런식으로 가벼운 기능을 함수로 직접 구현하면
파일로 작성할 때 공간을 많이 차지 하는 경우가 생길 수 있음
lambda를 활용하면 간단하게 함수 기능을 구현 가능
또한 많은 Python 메소드가 lambda와 융합하여 기능을 제공해주고 있음
(ex - numpy, pandas …)
#lambda를 활용한 뺄셈 기능 구현
minus = lambda x, y: x - y
#함수 사용
print(minus(10, 5))
>> 5
Python 3.x 부터는 많이 권장되지는 않지만 - 그래도 많이 사용되고 있음
단점 :
(1) 어렵다
(2) 테스트를 하기 어렵다 (디버깅)
(3) 문서화가 부족 (정보 부족)
(4) 직관적인 코드를 만들기 힘들다 (해석의 어려움)
(5) 이름이 존재하지 않는 함수를 만드는 것이기 때문에 관리가 힘들다
그럼에도 가끔 편하고 많은 메소드들이 지원을 하기 대문에 사용
✔️map
함수 + 리스트 or 튜플의 조합을 활용해서 바로 적용하는 기능
l = [1,2,3,4,5,6]
def f(x, y):
return x + y
#map을 활용해 보기
print(list(map(f, l, l)))
>> [2,4,6,8,10,12]
#lambda도 map에 활용가능
print(list(map((lambda x,y:x+y), l, l)))
>> [2,4,6,8,10,12]
if filter 도 적용 가능
l = [1,2,3,4,5,6]
print(list(map(lambda x,y: x+y if x % 2 == 0 else x, l, l)))
>>[1, 4, 3, 8, 5, 12]
map과 비슷한 느낌의 filter 함수
filter → ‘필터링’
l = [1,2,3,4,5]
print(list(filter(lambda x : x % 2 == 0, l)))
>>[2, 4]
✔️reduce
map과는 다르게 list에 똑같은 함수를 적용해서 통합
from functools import reduce
print(reduce(lambda x, y: x+y, [1,2,3,4,5]))
>>15
✅decorate (복습 중요도 : ⭐⭐⭐)
데코레이터를 사용하면 함수를 수정하지 않고도
유연하게 함수에 특정 동작을 추가하거나 작동 방식을 바꿀 수 있다.
데코레이터는 @~ 형태로 활용되는데
이를 사용하지 않고 구현하면 아래와 같다
def decorate(func):
def hi():
print('start')
func()
print('end')
return hi
#decorate에 넣어줄 함수
def s_hi():
print('Hi')
s_hi = decorate(s_hi)
s_hi()
>>start
>>Hi
>>end
이를 @를 활용해서 표현하면 다음과 같다
#다른 인사를 말해보도록
@decorate
def s_nice():
print('nice!')
s_nice()
>>start
>>nice!
>>end
데코레이터 같은 경우 pytorch에서 class를 활용해 전처리 구조를 만들거나
기능을 구현할 때 많이 활용된다
추가 +) 데코레이터를 활용해야 하는 이유!
추가 +) 데코레이터에 대한 추가적인 자료
✅ Logging Handling (복습 중요도 : ⭐⭐⭐)
✔️Logging
로그를 남기는 것은 프로그래밍 중에서 중요함
- print vs logging
- print → console창에만 남기 때문에 오류를 분석하기 힘들다
- 따라서 모듈별러 logging을 남기는 것이 필요
- logging이라는 메소드를 활용해서 기록가능
import logging
logging.debug('틀림')
logging.info('확인해라')
logging.warning('조심')
logging.error('에러발생')
logging.critical('망')
하지만 개발자의 목적에 따라서 level을 조정해줄 수 있다.
✔️configparser, argparser
- configparser - 파일에 설정 저장 및 실행
- argparser - 실행시점에 설정해줌
configparser
프로그램 실행 설정을 file에 저장
- section, key, value 값의 형태로 저장되어 있다
- 설정 파일을 Dict 형태로 호출한 이후 사용
import configparser
config = configparser.ConfigParser()
config.sections()
config.read(#파일경로)
config.sections()
for key in config['SectionOne']:
print(key)
config['SectionOne']["status"]
Argparser
ex)
- python main.py —help …
- 콘솔창에서 python 파일 실행 시점에서 옵션으로 조건을 달아줄 수 있음
#argparser 예시
import argparse
# ArgumentParser 객체를 생성합니다.
parser = argparse.ArgumentParser(description='이 프로그램은 인자를 받아와 처리합니다.')
# 인자를 추가합니다.
parser.add_argument('input_file', type=str, help='입력 파일 이름')
parser.add_argument('--output_file', type=str, default='output.txt', help='출력 파일 이름')
parser.add_argument('--verbose', action='store_true', help='자세한 정보 출력 여부')
# 인자를 파싱합니다.
args = parser.parse_args()
# 파싱된 인자를 출력합니다.
print('입력 파일 이름:', args.input_file)
print('출력 파일 이름:', args.output_file)
print('자세한 정보 출력 여부:', args.verbose)
이를 console에서 실행 할 때 아래와 같이 입력해줌으로 조건을 조절할 수 있다
여기서 ‘—output_file’과 ‘—verbos’의 경우 옵션으로 선택하는것
‘input_file’같은 경우는 필수로 입력해야한다
python example.py input.txt --output_file=output.txt --verbose
이를 실행하면, args.input_file는 "input.txt"가 되고, args.output_file는 "output.txt"가 되며, args.verbose는 True가 됩니다
추가 +) 우리의 천재 Chatgpt에게 딥러닝 학습과정에서 Argparser를 활용한 예시를 부탁해 보았다.아래는 argparse를 사용하여 하이퍼파라미터 값을 입력받아 딥러닝 모델을 학습하는 코드의 예시입니다
딥러닝에서 argparse를 사용하는 예시를 들어보겠습니다. 보통 딥러닝 모델을 학습할 때 하이퍼파라미터(hyperparameter) 값을 여러 번 변경해가면서 실험을 진행합니다. 이때 argparse를 사용하면 커맨드 라인 인터페이스를 통해 하이퍼파라미터 값을 조정할 수 있습니다.
import argparse
import torch
import torch.nn as nn
import torch.optim as optim
# ArgumentParser 객체를 생성합니다.
parser = argparse.ArgumentParser(description='이 프로그램은 딥러닝 모델을 학습합니다.')
# 하이퍼파라미터를 추가합니다.
parser.add_argument('--lr', type=float, default=0.001, help='학습률')
parser.add_argument('--batch_size', type=int, default=32, help='배치 크기')
parser.add_argument('--num_epochs', type=int, default=10, help='에포크 수')
parser.add_argument('--hidden_size', type=int, default=64, help='은닉층 크기')
# 인자를 파싱합니다.
args = parser.parse_args()
# 파싱된 인자를 출력합니다.
print('학습률:', args.lr)
print('배치 크기:', args.batch_size)
print('에포크 수:', args.num_epochs)
print('은닉층 크기:', args.hidden_size)
# 데이터를 로드합니다.
train_dataset = ...
train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=args.batch_size, shuffle=True)
# 모델을 정의합니다.
class MyModel(nn.Module):
def __init__(self, input_size, hidden_size, output_size):
super(MyModel, self).__init__()
self.fc1 = nn.Linear(input_size, hidden_size)
self.relu = nn.ReLU()
self.fc2 = nn.Linear(hidden_size, output_size)
def forward(self, x):
x = self.fc1(x)
x = self.relu(x)
x = self.fc2(x)
return x
model = MyModel(input_size=..., hidden_size=args.hidden_size, output_size=...)
# 손실 함수와 옵티마이저를 정의합니다.
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=args.lr)
# 모델을 학습합니다.
for epoch in range(args.num_epochs):
for batch_inputs, batch_labels in train_loader:
optimizer.zero_grad()
batch_outputs = model(batch_inputs)
loss = criterion(batch_outputs, batch_labels)
loss.backward()
optimizer.step()
print(f'Epoch {epoch+1}: Loss = {loss.item():.4f}')
✅정규식 (복습 중요도 ⭐)
규식이가 누군데?
사실 CV에서는 거의 사용될 일이 없는 부분이지만
상식에서 알아두면 나중에 정형데이터나 문자데이터를 처리할 때 유용함
✅ Handling Shape (복습 중요도 ⭐⭐⭐)
- 딥러닝 아키텍쳐를 구성하다 보면 데이터의 형태를 변경해주어야 하는 경우가 있다.
- 그럴 때 Numpy를 자유자재로 다룬다면 상당히 편함
✔️reshape
Array의 shape의 크기를 변경함
import numpy as np
a = [[1,2,3],[4,5,6],[1,2,3]]
array = np.array(a, int)
print(array.shape)
>>(3, 3)
#reshape를 활용해서 변경
np.array(a).reshape(1,9)
>>array([[1, 2, 3, 4, 5, 6, 1, 2, 3]])
np.array(a).reshape(9,)
>>array([[1, 2, 3, 4, 5, 6, 1, 2, 3]]) #비워두면 크기에 맞춰 변경
Pandas (복습 중요도 ⭐⭐⭐⭐)
- 그냥 데이터 이용하려면 pandas는 자유자재로 다룰 줄 알아야 함
- 여기는 내용적인 측면보다는 실습으로 해보는 것이 중요함
공식 documentation :
Pandas 나만의 문제
'네이버 부스트캠프 🔗 > ⭐주간 학습 정리' 카테고리의 다른 글
[네이버 부스트 캠프 AI Tech] Pytorch nn.Module & Dataset (0) | 2023.03.14 |
---|---|
[네이버 부스트 캠프 AI Tech] Pytorch 기본 (0) | 2023.03.13 |
[부스트 캠프]Week 1 회고 및 Week 2 목표 정리 (0) | 2023.03.13 |
[네이버 부스트 캠프 AI Tech] CNN & RNN (0) | 2023.03.10 |
[네이버 부스트 캠프 AI Tech] 딥러닝 수학기초 (1) | 2023.03.10 |