본문 바로가기

728x90

IT/AI

(39)
딥러닝 기초 핵심 개념 2 Dropout Dropout은 학습 중에 설정한 확률값에 따라서 일부 뉴런을 제거하여 과대적합을 방지하는 기법입니다. 특정 뉴런에만 집중해서 학습하지 않도록 과대적합을 방지하도록 사용합니다. 더보기 import torch import torch.nn as nn class Model(nn.Module): def __init__(self): super(Model, self).__init__() self.fc1 = nn.Linear(10, 5) self.dropout = nn.Dropout(0.5) # dropout 비율은 50% self.fc2 = nn.Linear(5, 1) def forward(self, x): x = torch.relu(self.fc1(x)) x = self.dropout(x) x = ..
딥러닝 기초 핵심 개념 1 Loss Function Loss Function은 모델의 예측값과 실제 값이 얼마나 유사한지를 판단하는 함수입니다. 작을수록 두 값이 유사합니다. 회귀와 분류에 따라 다양한 Loss Function이 사용됩니다. 회귀- 평균절대오차(Mean Absolute Error): 두 값의 차이의 절대값의 전체 합의 평균 $MAE = \frac{1}{N}\sum |y - \hat{y}|$ 평균제곱오차(Mean Squared Error): 두 값의 차이의 제곱의 전체 합의 평균 $MSE = \frac{1}{N}\sum_{i=1}^{N} (|y_{i} - \hat{y}_{i}|)^{2}$ RMSE: MSE의 제곱근(Root) $RMSE = \sqrt{\frac{1}{N}\sum_{i=1}^{N} (|y_{i} - \..
머신러닝 기초 Gradient Descent 1차 미분 계수$($기울기$)$를 이용해 함수의 최솟값을 찾는 방법 Gradient Descent는 함수의 최솟값을 찾는 방법 중 하나입니다. 함수의 기울기를 이용하여 최솟값을 찾습니다. Learning Rate는 학습 속도를 결정하는 요소 중 하나이며, 적절한 값을 선택하는 것이 중요합니다. 더보기 단순한 이차 함수의 최솟값을 Gradient Descent 알고리즘을 사용하여 찾아보겠습니다. import numpy as np # 이차 함수 정의: f(x) = x^2 def quadratic_function(x): return x ** 2 # Gradient Descent 알고리즘 적용 def gradient_descent(starting_point, learning_rat..
인공 신경망 기초 Perceptron Perceptron은 초기의 인공 신경망으로, 사람의 신경망을 모방하여 다수의 입력을 받아서 하나의 결과를 내보내는 알고리즘입니다. 각 입력에 가중치를 곱하여 임계치를 기준으로 정보$($데이터$)$를 전달합니다. 단층 퍼셉트론은 입력층과 출력층으로 구성되며, 다층 퍼셉트론은 입출력 사이에 은닉층이 추가되어있으며, 은닉층에서 비선형으로 만들어주는 활성화함수가 있다. 더보기 예를 들어, Perceptron을 사용하여 AND 게이트를 구현한다고 가정해보겠습니다. AND 게이트는 두 입력이 모두 참일 때만 출력이 참이 되는 논리 연산입니다. Perceptron은 두 입력에 대한 가중치를 곱하고 임계치를 적용하여 출력을 계산할 수 있습니다. def perceptron(input1, input2..
[이미지] CustomDataset [Python] - cv2, PIL 아직 모르는 게 많지만, 작성한 코드입니다. train 폴더 내에 label 이름별 폴더가 들어 있고, 그 내부에 이미지가 들어있는 구조입니다. test 폴더 같은 계층에 존재한다는 가정하에 향후 이용을 위해 train 폴더 상위 폴더에서 os.path.join으로 train을 더하고 os.walk로 내부 폴더와 파일명을 가져옵니다. for문을 돌려서 위치에 맞게 이미지 파일 경로와 라벨을 저장하고, 라벨은 학습을 위해 딕셔너리를 활용해 숫자로 변경합니다. 적절한 변형을 가한 후 window창을 띄워 확인합니다. import cv2 import os from PIL import Image import numpy as np from torch.utils.data import Dataset, DataLoad..
[이미지] 번호판 생성 [Python] - cv2, PIL 2006년 이전쯤 기준 차량 번호판 생성 도시와 문자 숫자를 랜덤으로 선택 높이, 너비 정보를 구하고 정보를 넣을 좌표 구하기 PIL 이미지로 문자를 이미지에 넣기 # 문자를 이미지에 넣기 위해 PIL 파일로 변환 과정 필요 # Image.fromarray()에 변경할 이미지를 입력 # 문자를 삽입하기 위해 ImageDraw.Draw()에 PIL 이미지로 변환된 파일을 입력 # draw.text()에 시작 좌표(가로, 세로), 문자, 색상, 폰트.. 등등을 입력 final_img = Image.fromarray(org_img) draw = ImageDraw.Draw(final_img) draw.text((450, 150), upper_str, (255,255,255), font=font_u) 번호판 10..
[이미지] Numpy로 이미지 처리 기초 [Python]-cv2 고양이 사진을 여러 구간으로 나누어 224x224 크기로 10개의 이미지를 만드는 과정 $($하나의 함수로 길게 만들었어요$)$ # 마구잡이로 자르면 고양이의 특징이 없는 이미지가 나올 수 있음 # 전체 이미지 비율을 유지하기 위해서 padding을 하고 # 어떻게 자르든 고양이의 특징이 나오도록 전체 이미지를 축소하고 # 랜덤하게 224x224 크기로 10번 crop 진행 from matplotlib import pyplot as plt import numpy as np import random import cv2 def pad_resize_crop(img, size): # 패딩할 상하/좌우 픽셀 # 상하나 좌우 중 한 세트에만 패딩을 할 예정 -> 초기 값: 0 # 상하좌우 모두 패딩을 하고 싶다면 ..
[이미지] Numpy로 이미지를 224x224 크기로 crop 하기 [Python]-cv2 from matplotlib import pyplot as plt import numpy as np import random import cv2 org_img = cv2.imread("./cat2.png")[:,:,::-1] plt.imshow(org_img) plt.title(f"original image") plt.show() def cropping(img): height, width = img.shape[:2] plt.figure(figsize=(10,5)) for i in range(10): # 가로, 세로의 crop할 시작점 crop_s_h = random.randint(0, height-224) crop_s_w = random.randint(0, width-224) # 시작점부터 가로, 세로가..
[이미지] Numpy로 이미지 패딩 후 224x224 resize 하기 [Python]-cv2 더보기 패딩 없이 resize만 하면 아래처럼 이미지가 뭉게집니다. import numpy as np import cv2 from matplotlib import pyplot as plt def resize_224x224(img): # 패딩할 상하/좌우 픽셀 # 상하나 좌우 중 한 세트에만 패딩을 할 예정 -> 초기 값: 0 # 상하좌우 모두 패딩을 하고 싶다면 # 0이 아닌 같은 값으로 넣은 후 # 이후 ud, lr 값을 업데이트할 때, # += 로 값을 더해주는 형식으로 하면 됨. ud, lr = (0, 0), (0, 0) # 이미지의 높이, 너비 중의 더 큰 값 M = max(img.shape[:2]) # s = 이미지의 높이와 너비의 차 s = img.shape[0]-img.shape[1] # 높..
데이터와 전처리 데이터 처리와 변환에 대한 이해는 효과적인 데이터 분석 및 모델링 작업을 위해 핵심적입니다. 데이터 파이프라인은 데이터의 생성, 수집, 가공, 저장, 시각화 등 일련의 과정을 의미합니다. 이러한 과정을 효율적으로 관리함으로써 데이터의 품질과 활용 가능성을 향상시킬 수 있습니다. 데이터 저장소의 선택은 데이터 처리 과정에 중요한 영향을 미칩니다. 데이터 웨어하우스는 기간 시스템의 데이터베이스에 축적된 데이터를 변환하고 관리하는 데이터베이스입니다. 데이터 레이크는 구조화되지 않은 대량의 데이터를 중앙 집중식으로 저장하고 처리하는데 사용됩니다. 이러한 저장소는 데이터 분석의 효율성과 확장성을 결정짓는 중요한 요소입니다. 데이터 분석 프로세스는 문제 정의, 데이터 수집, 데이터 전처리, 모델링, 해석 및 시각화..
[NLP] 자연어 처리: 트랜스포머 [기초] 자연어 처리는 컴퓨터가 인간의 언어를 이해하고 생성하는 분야로, 다양한 기술과 모델이 사용됩니다. 이 글에서는 자연어 처리에서 주로 사용되는 접근법과 모델 중에서 Autoencoding, Autoregressive, 시퀀스 투 시퀀스 모델, 그리고 트랜스포머에 대해 다뤄보겠습니다. 1. Autoencoding vs. Autoregressive - Autoencoding: 입력 데이터를 압축하여 의미 있는 표현을 학습하는 방식입니다. 인코더와 디코더로 구성되며, 데이터의 특징을 추출하고 잡음 제거, 차원 축소 등에 활용됩니다. - Autoregressive: 시퀀스 데이터를 이전 타임스텝의 정보를 활용하여 다음 타임스텝을 예측하는 방법입니다. 주로 시퀀스 생성 작업에 활용되며, 번역이나 음성 합성에서 사용..
[통계] Day 7-2 데이터 분석: 다변량 분석 다변량 분석은 여러 개의 독립 변수와 종속 변수 간의 관계를 분석하는 통계적 방법으로, 주로 독립 변수들이 종속 변수에 미치는 영향을 이해하고 예측 모델을 개발하는 데 활용됩니다. 이는 데이터의 탐색과 시각화, 변수의 특성과 성질 파악, 데이터 전처리와 변수 선택, 예측 및 분류 등 다양한 목적으로 활용됩니다. 데이터의 다양한 정보를 제공하며 변수 간의 상관 관계를 파악하는 데 유용하며, 또한 데이터의 차원을 축소하여 복잡성을 줄이고 모델을 개선하는 데에도 활용됩니다. 다변량 분석은 주로 회귀 분석, 다변량 분산 분석, 요인 분석, 주성분 분석 등의 기법을 포함하며, 시각화 기법으로는 산점도 행렬, 병렬 좌표, 히트맵, 다차원 척도법 등을 활용하여 변수들 간의 관계를 시각적으로 이해하고 패턴을 발견할 수..