텍스트
토크나이징
- 노이즈 캔슬링: 띄어쓰기 체크
- 토크나이징: 말뭉치를 토큰 단위로
- POS 태킹: 품사 판별
- 필터링: 불필요한 단어 제거
벡터 표현
- BOW (Bag of Words): 단어 빈도만 포커스
- DTM (Document-Term matrix): 단어들의 빈도 행렬
- TF-IDF (Term Frequency-Inverse Document Frequency): 단어의 중요도를 계산하여 표현
- One-hot-encoding 표현: 차원 커지고 유사성 표현 X
- Dense/Distributed representation: N차원 공간 벡터로 의미적 유사성 표현
- 코사인 유사도: 문서의 유사도 구함
임베딩
- 워드 임베딩: 자연어를 좌표평면 위에 표현, 희소표현 -> 밀집표현
- Word2Vec: 밀집벡터를 얻음, CBOW방식, Skip-gram방식
- FastText: 내부 단어를 고려, n-gram으로 나누어 학습, 모르는 단어 OOV
- Keras 임베딩
언어 모델
- RNN: 시퀀스 모델로 순서가 있음
- LSTM: 필요한 정보만 저장해 학습
- Seq2Seq: 인코더+디코더
- Attention: 중요한 feature에 집중
- Transformer: 병렬화 성능 향상
- BERT: 문맥을 반영한 임베딩, Sentence Pair Classification, Single Sentence Classification, Question Answering, Single Sentence Tagging
이미지
CNN
- 컨볼루션 레이어: 필터를 통해 피쳐맵 생성
- Stride: 슬라이딩 간격
- Padding: 외각에 0을 채워 넣은 것
- 풀링 레이어: 크기를 줄이고 특정 데이터 강조
- Relu 활성화 함수
- FCN
- LeNet-5, AlexNet, GoogleLeNet, ResNet
Object Detection
- IoU: 얼마나 겹치는가 지표
- NMS: 가장 적합한 box 선택 기법
- mAP: 재현율에 따른 정밀도의 값 평균
- RCNN, Fast RCNN, Faster RCNN
- YOLO, SDD
실전
Tabular
빅분기 실기와 비슷
뒤의 두 문제를 위해 빠르게 풀것
Text
- 한글 이외 문자 제거: df['col'].str.replace('[^가-힣]', '', regex=True)
- 공백 제거 (스트립): df['col'].str.strip()
- 중복 제거: df.drop_duplicates(subset=['col'], inplace=True)
- 필요하면 라벨 인코딩: from sklearn.preprocessing import LabelEncoder 로 fit_transform, inverse_transfrom도 됨
- 필요하다면 직접 라벨 리스트를 만들어 매핑
- df['col'].values를 통해 시리즈가 아닌 넘파이 배열로 변환
- 세트 분리: from sklearn.model_selection import train_test_split 으로 하는데 stratify 붙여주도록 하자
- TF-IDF 변환: from sklearn.feature_extraction.text import TifidfVectorizer 로 fit_transform, test set은 따로 transform
- Tokenizing
- 단어 사전: from tensorflow.keras.preprocessing.text import Tokenizer 로 fit_on_texts
- 문장 숫자로 나열: texts_to_sequences를 통해서
- 1번 등장하는 단어 제거: word_counts로 빈도를 세서 직접 새로운 문장 생성해야함
- 패딩: from tensorflow.keras.preprocessing.sequence import pad_sequences 로 maxlen을 인자로
- 랜덤포레스트 : from sklearn.ensemble import RandomForestClassifier 로 fit, score로 바로 점수 얻기
- LSTM 모델링
- max_words = 총 단어 갯수 + 1(패딩)
- max_len = 최대 문장 길이
- embedding_dim = 32 (보통 32, 64, 128, 300 이라고 함)
- 모델 선언: from tensorflow.keras.models import Sequential 이후 이 모델에 add
- 임베딩: from tensorflow.keras.layers import Embedding 에 max_words, embedding_dim, input_length=max_len을 인자로
- LSTM: from tensorflow.keras.layers import LSTM 에 16, return_sequences=True로 두개 사용
- Flatten layers로 1차원 벡터 생성
- Dense layers로 128, activation='swish', 32, activation='swish', 6(타겟수), activation='softmax'
- model.build(input_shape=(None, max_len))으로 입력 크기 빌드
- model.compile(loss='sparse_categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
- from tensorflow.ketas.callbacks import EarlyStopping, ModelCheckpoint
- es = EarlyStopping(monitor='val_loss', patience=10, verbose=1)
- cp = ModelCheckpoint('tmp_checkpoint.keras', m onitor='val_loss', verbose=1, save_best_only=True)
- model.fit(x_train, y_train, epochs=50, batch_size=512, validation_split=0.2, verbose=1, callbacks=[es, cp])
- model.evaluate(x_test, y_test)
Image
- 이미지 path 지정과 os.listdir 로 파일 리스트 만들기
- from PIL import Image 로 open 후 import matplotlib.pyplot as plt 로 plt.imshow(img) (open시 resize)
- np.array(img)/255. 으로 이미지 스케일링
- tf.keras.preprocessing.image_dataset_from_diretory 로 데이터셋 제작
- directory=img_path, label_mode='binary' or 'categorical', batch_size=batch_size, image_size=(224, 224), seed=42
- shuffle=True는 훈련데이터만, validation_split=0.2, subset='training' or 'validation' 을 두번 해서 두 세트 만들기
- 참고로 폴더 이름을 클래스 라벨로 사용함
- 아니면 직접 클래스 라벨링은 딕셔너리를 통해 img_list, label_list를 제작 후 numpy array로 만들고 Text와 같이 세트 분리
- 모델 만들기
- input_shape = (size, size, 3)
- Rescaling(1. / 255): 이미지 스케일링을 '안'했었다면
- Conv2D(커널수, kernal_size=(5, 5), strides=(1,1), padding='same', activation='relu', imput_shape=input_shape): 패딩을 same으로 해서 이미지 사이즈 그대로
- MaxPooling2D(pool_size=(2,2), strides=(2,2)): 이미지 사이즈 반으로
- Conv2D(64,(2,2), activation='relu', padding='same'): 작은 필터 여러개로 사이즈는 그대로
- MaxPooling2D(pool_size=(2,2)): 사실 pool_size로 자동 스트라이드되서 이미지 반으로
- Dropout(0.2), Flatten(): 드랍아웃 후 1차원 벡터로
- Dense(128, activation='relu'), Dropout(0.3), Dense(5, activation='softmax'): 연결, 드랍아웃, 최종 클래스
- compile: optimizer=tf.keras.optimizers.Adam(learning_rate) 도 사용 가능
- es, cp 진행: patience는 개선되지 않는 epoch의 수
- fit으로 학습: validation_split=0.2로 직접 나누거나, validation_data=(X_test, y_test)로 따로 지정하거나, keras로 제작한 셋은 하나로
- predict 시 배치 형태로 numpy().reshape(-1, size, size, 3) 필요, np.argmax로 가증 큰 예측비율 선택, keras로 제작한 셋은 next(iter(dataset))으로
- 모델 가져오기
- dir(tf.keras.applications) 에 다양한 모델들 확인
- base_model = tf.keras.applications.MobileNetV2: input_shape=(size, size, 3) 입력 크기 설정, weights='imagenet' 사전 학습 가중치 불러옴, include_top=False 최상단 레이어 제거해서 사용
- MobileNetV2는 [-1, 1] 픽셀 값 예상해서 스케일링 해주면 좋음
- preprocess_input = tf.keras.applications.mobilenet_v2.preprocess_input, img = preprocess_input(img) 로 그냥 자동 정규화
- rescale = tf.keras.layers.Rescaling(1./127.5, offset=-1) 로 레이어 추가
- base_model.trainable = False 으로 모델 고정
- input = tf.keras.Input(shape=(224, 224, 3)): 입력 정의
- x = tf.keras.layers.Rescaling(1./127.5, offset=-1)(inputs): input을 리스케일링
- x = base_model(x, training=False): 추론 모드로 훈련 없이 특징 추출
- x = tf.keras.layers.GlobalAveragePooling2D()(x): 각 체널 평균내서 1차원 벡터로 차원 축소
- output = tf.keras.layers.Dense(5, activation='softmax')(x): 마지막 클래스 분류
- model = tf.keras.Model(inputs=input, outputs=output): 입출력을 명시해 모델 생성
- compile, es, cp, fit 진행
'STUDY' 카테고리의 다른 글
[자격증] 빅데이터 분석 기사 실기 준비 (2) | 2024.11.16 |
---|---|
[자격증] ADsP 준비 (4) | 2024.11.02 |
[자격증] 정보처리기사 실기 준비 (3) | 2024.10.17 |
[자격증] DAsP 준비 (6) | 2024.09.25 |
[자격증] 빅데이터 분석 기사 필기 준비 (2) | 2024.08.30 |