TensorFlow => scikit-learn style API 와 유사
PyTorch => NumPy API 와 유사
batch
=> 작게 지정하면 학습을 더 빠르게 진행할 수 있으나, 클래스가 여러개인 분류 문제에서 클래스가 불균형하게 학습하지 않도록 주의가 필요합니다
sigmoid => activation function 으로 사용했지만, 기울기 소실 문제 때문에 활성화 함수(activation function)로는 잘 사용하지 않고 이진 분류의 출력을 확률 값으로 만들어 줄 때 사용합니다. 0~1사이의 값으로 출력합니다.
softmax => 분류의 output logit 값에 대한 확률 변환을 할 때 사용합니다. 클래스의 수 만큼 출력이 되며 모든 클래스를 다 더했을 때 1이 됩니다. 클래스가 10개라면 10개의 확률값을 출력하고 10개의 확률값을 다 더했을 때 1이 됩니다.
Flatten() 을 가장 위에서 해주는 이유?
- 모델의 입력 데이터를 1차원 벡터 형태로 변환하여 모델의 입력 데이터 형태를 바꾸어줍닌다. - 레이어에서 1차원 벡터를 입력받을 수 있도록 준비합니다.
validation을 사용하는 이유? 1) 현업 => 실제 비즈니스에 적용해 보기 전에는 얼마나 모델을 신뢰할 수 있을지 평가가 필요합니다. 2) 경진대회 => 예측 결과를 매번 제출해 보기 번거롭습니다. 진행 중인 경진대회는 제출횟수가 정해져 있습니다. 여러 번 제출하고 싶어도 어뷰징 이슈가 있을 수 있어서 여러 번 제출할 수 없습니다.
MAE보다 MSE를 일반적으로 Loss로 사용하는 이유?
1) 미분 가능성 - 경사 하강법과 같은 최적화 알고리즘을 쉽 적용 가능
2) 이상치에 덜 민감 - 실제와 예측 간 차이의 제곱을 사용하기 때문
3) 평균 제곱근 오차 RMSE 계산 가능
4) 최적화 과정에서 빠르게 수렴 - 예측 오차가 큰 경우, 제곱한 오차를 더 크게 반영한다는 특징
optimizer.zero_grad()
- optimizer 객체의 zero_grad() 메서드를 호출하여 모델의 매개변수들의 기울기를 초기화
- 이전에 계산된 기울기 값이 남아있는 것을 방지
loss.backward()
- 모델의 출력값 y_pred과 정답값 y_train 간의 손실(loss)을 구한 후,
- 해당 손실(loss)에 대한 모델의 가중치(weight)에 대한 기울기(gradient)를 계산
- backward() 메서드를 호출하여 수행
- Autograd 기능을 사용하여 자동으로 기울기를 계산
- Autograd는 모델의 입력과 출력에 대한 미분 값을 계산하여 각 매개변수의 기울기를 구하는데 사용
* optimizer.step()
- 모델의 매개변수들의 기울기를 사용하여 가중치(weight)를 갱신
- 선택된 최적화 알고리즘(SGD, Adam 등)에 따라 가중치 갱신
- 모델의 가중치는 이러한 반복적인 역전파(backpropagation) 과정을 통해 조정됨
- 손실 함수를 최소화하는 방향으로 학습이 진행
torch.no_grad()
- Autograd 엔진이 트래킹하는 것을 멈추어서 메모리 사용량을 줄이고 연산 속도를 높입니다.
- 예측값을 구할 때, 미분이 필요하지 않으므로 torch.no_grad()를 사용합니다
합성곱신경망, CNN
Q. 입력층에서 이미지를 flatten() 처리시 단점?
공간 정보 손실, 계산 비용 증가, 메모리 사용량 증가, 계산 소요 시간 증가, 성능 저하, 가변 이미지 크기 처리의 어려움,
softmax 의미?
이미지 분류, 마지막에 출력층을 통해 나온 logit 값을 softmax 로 확률을 구해서 반환.
확률값이 가장 높게 나오는 것이(np.argmax) 해당 클래스가 됨.
커널(kernel)?
입력 이미지의 특징을 추출하는 데 중요한 역할, 각 커널은 입력 이미지에서 다른 특징을 추출.
추출된 특징 맵(feature map)은 다음 레이어로 전달되어 최종 분류(classification)나 회귀(regression) 작업 수행
랜덤하게 여러개의 커널을 만들어서 합성곱 연산
랜덤값을 만들어서 합성곱 연산을 하게 되면 여러 특징을 학습
=> 랜덤하게 동그라미, 선, 뾰족함 등 다양한 패턴을 생성
합성곱 연산 => 특징을 추출
풀링 연산 => 이미지 추상화(압축, 사이즈 줄이는 효과, 오버피팅 방지)
컨볼루션 신경망(Convolutional Neural Network) 레이어 구성
- 합성곱(Convolution)과 풀링(Pooling) 과정이 반복적으로 수행!
-> 입력 이미지에서 특징을 추출하고, 이미지의 크기를 줄이거나 강하게 활성화된 특징을 보존하는 작업을 반복하여 최종적으로 분류나 회귀 등의 작업을 수행할 수 있도록 학습한다
filters : 컨볼루션 필터의 수 == 특징맵 수
kernel_size : 컨볼루션 커널의 (행, 열) => 필터 사이즈
padding : 경계 처리 방법
- ‘valid’ : 유효한 영역만 출력이 됩니다. 따라서 출력 이미지 사이즈는 입력 사이즈보다 작습니다.
- ‘same’ : 출력 이미지 사이즈가 입력 이미지 사이즈와 동일합니다.
(padding = same이고 strides=1 이면 출력은 입력과 동일한 크기를 갖는다.)
input_shape : 모델에서 첫 레이어일 때만 정의하면 됨 (batchSize, height, width, channels)
activation : 활성화 함수 설정합니다.
- ‘linear’ : 디폴트 값, 입력뉴런과 가중치로 계산된 결과값이 그대로 출력
- ‘relu’ : rectifier 함수, 은닉층에 주로 사용
- ‘sigmoid’ : 시그모이드 함수, 이진 분류 문제에서 출력층에 주로 사용
- ‘softmax’ : 소프트맥스 함수, 다중 클래스 분류 문제에서 출력층에 주로 사용
padding='same'과 padding=1 효과?
=> 1픽셀씩 가장자리 부분을 0으로 채워주게 됩니다
=> 입력과 출력의 사이즈를 같게 해줄 수 있으며, 모서리 부분을 더 잘 학습할 수 있습니다.
Feature Map - 합성곱 레이어 통과
Activation Map - 활성화함수 레이어 통과
PIL 이미지 작업을 위한 표준 절차를 제공하고 있으며, 다음과 같은 것이있다.
픽셀 단위의 조작
마스킹 및 투명도 제어
흐림, 윤곽 보정 다듬어 윤곽 검출 등의 이미지 필터
선명하게, 밝기 보정, 명암 보정, 색 보정 등의 화상 조정
이미지에 텍스트 추가
기타 여러 가지
PIL => 이미지 처리
OpenCV => 이미지 + 영상, 예)자율주행
'멋쟁이사자처럼 AI School 8기(fin) > TIL(Today I Learn)' 카테고리의 다른 글
[멋쟁이사자처럼 AI스쿨] TIL(23.4.18) 전이학습 (0) | 2023.04.18 |
---|---|
[멋쟁이사자처럼 AI스쿨] TIL(23.4.17) CNN (0) | 2023.04.17 |
[멋쟁이사자처럼 AI스쿨] TIL(23.4.11) 딥러닝2 (4) | 2023.04.11 |
[멋쟁이사자처럼 AI스쿨] TIL(23.4.10) 딥러닝 (0) | 2023.04.10 |
[멋쟁이사자처럼 AI스쿨] TIL(23.4.7) 알고리즘, 자료구조 week2(with 이호준) (0) | 2023.04.10 |