전체 글 212

[Python] 딥러닝 ResNet 구현하기

ResNet 구현하기 ResNet에 처음 소개된 Residual Connection은 모델 내의 지름길을 새로 만든다고도 하여 Skip Connection이라고도 불리며, 레이어 개수가 매우 많은 경우에 발생할 수 있는 기울기 소실(Vanishing Gradient) 문제를 해결하고자 등장 import tensorflow as tf from tensorflow.keras import layers, Model, Sequential class ResidualBlock(Model): def __init__(self, num_kernels, kernel_size): super(ResidualBlock, self).__init__() # TODO: [지시사항 1번] 2개의 Conv2D Layer를 추가 self...

[Python] 딥러닝 CNN(VGG16 모델 구현하기)

VGGNet은 ILSVRC 2014년도에 2위를 한 모델로 모델의 깊이에 따른 변화를 비교할 수 있게 만든 모델 이전까지의 모델들은 첫 번째 Conv Layer에서는 입력 영상의 축소를 위해 11 x 11, 7 x 7의 filter 를 사용한 것에 비해 VGGNet 은 Convolution Layer 에 3 x 3 filter 를 사용한 것이 특징 import tensorflow as tf from tensorflow import keras def VGG16(): # Sequential 모델 선언 model = keras.Sequential() # TODO : 지시사항을 잘 보고 VGG16 Net을 완성해보세요. # 첫 번째 Conv Block # 입력 Shape는 ImageNet 데이터 세트의 크기와 ..

[Python] 딥러닝 CNN 연산

Fully-connected Layer와 이미지 데이터 FC Layer는 1차원 데이터를 요구 • 이미지를 단순하게 1차원으로 바꾸면 2차원 상에서 가지는 정보를 포기해야 함 - 이미지 내 사물 간의 거리 관계 등 - 색의 변화 → 특히 세로로 변하는 상황 • 즉, 공간 정보(Spatial Information)가 무너짐 • 따라서 이미지 처리에 특화된 딥러닝 모델이 등장 • CNN의 대표적인 구성 요소 - Convolutional Layer - Pooling Layer - 분류기(Classifier): Fully-connected layer로 구성 Convolution 연산 CNN을 구현하는 핵심 연산 • 커널과 Convolution 연산 - 전통적인 이미지 처리 분야에서 커널(또는 필터)이란 것이 존..

[Python] Tensorflow 커스텀 데이터셋 불러오기

Tensorflow 커스텀 데이터셋 불러오기 대용량의 데이터셋은 한번에 메모리에 불러오는 것이 불가능 대용량의 데이터셋을 학습에 사용할 경우에는 해당 데이터를 사용할 때만 메모리에 불러오는 방법을 사용 tensorflow에서는 이 과정을 수행하는 함수를 제공 tensorflow에서 제공하는 ImageDataGenerator는 데이터셋을 불러오는 기능과 데이터 증강을 적용하는 기능을 제공 사전에 dataset폴더에 train과 val을 구분하여 데이터를 만들어준다. import os os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' import tensorflow as tf from tensorflow.keras.preprocessing.image import ImageDataGen..

[Python] PIL 알아보기

PIL 알아보기 1. PIL(Pillow) 소개 Python에서 자주 사용하는 이미지 처리 라이브러리는 PIL(Python Imaging Library) . 하지만 기존 PIL 라이브러리 개발은 2011년에 중단되었고, 오픈 소스였던 해당 프로젝트를 복제(fork)한 Pillow 라는 이름의 프로젝트가 현재까지 개발되고 있음 2. PIL 시작하기 먼저 Pillow는 PIP를 이용하여 설치 python3 -m pip install Pillow In [4]: pip install Pillow Requirement already satisfied: Pillow in /opt/conda/lib/python3.8/site-packages (8.0.1) Note: you may need to restart the ..

[Python] 텐서플로 손실곡선, 드롭아웃, 모델저장

import tensorflow as tf # 실행마다 동일한 결과 얻기 위한 랜덤시드 적용 tf.keras.utils.set_random_seed(42) # 텐서플로 연상을 결정적으로 만든다. # 시작부분 입력 tf.config.experimental.enable_op_determinism() 손실곡선 In [ ]: from tensorflow import keras from sklearn.model_selection import train_test_split In [ ]: (train_input, train_target), (test_input, test_target) = keras.datasets.fashion_mnist.load_data() Downloading data from https://s..

[Python] 딥러닝 순환 신경망 (RNN)

순환 신경망(RNN) 자연어 처리를 위한 딥러닝 모델 MLP 기반 신경망의 자연어 분류 방식 일반적인 뉴럴 네트워크로 학습 한다면, 단어들이 순서에 대해서 기존의 뉴럴 네트워크는 신경을 쓰지 않고 학습을 함 철수가 영희를 좋아한다. 라는 문장이 있다면, 영희가 철수를 좋아한다 이렇게 될경우 의미가 달라지게 됨 자연어 분류를 위한 순환 신경망(Recurrent Neural Network) RNN 모델은 순서를 고려해서 학습을 실시한다. RNN 단어가 들어가서 다음 단어를 예측하려고 한다. 이 다음 단어가 수업 + 이 라는 예측을 하게 하고 그 다음 단어가 예측을 할때, 수업 + 이 가 같이 들어가서 Hidden State랑 합쳐지는 방식으로 다음단어를 예측하고 다시 합쳐져서 학습 하는 방식으로 실시함 순환..

[Python] 딥러닝 자연어 처리를 위한 딥러닝

자연어 처리 Process 1. 자연어 전처리(Preprocessing) 2. 단어 표현 (WordEmbedding) 3. 모델 적용 (Modeling) 원 상태 그대로의 자연어는 전처리 과정이 필요함 자연어는 오류를 어떻게 없앨 것인가 그리고 의미랑 전혀 상관없는 단어를 어떻게 없앨지 오류를 없애는 것을 타이핑을 잘못 했거나, 오타가 있을 경우, 컴퓨터는 단어인가 라고 생각 할 수 있기 때문에 오류를 전처리 해서 없애줘야 함 문장을 나누는것을 토큰으로 나누게 됨 Noise Canceling “안녕하 세요. 반갑 스니다.” => “안녕하세요. 반갑습니다.” Tokenizing 문장을 토큰(Token)으로 나눔, 토큰은 어절, 단어 등으로 목적에 따라 다르게 정의 “딥러닝 기초 과목을 수강하고 있습니다.”..

[Python] 딥러닝 이미지 처리(CNN)

이미지 분류 컴퓨터에게 이미지는 각 픽셀 값을 가진 숫자 배열로 인식 다양한 방법으로 이미지가 변형될 수 있는데 그러한 변화에도 강인한 이미지 처리를 어떻게 할 것인가 CNN 딥러닝 이전 컴퓨터 비전은 각 특징을 찾아서 특징을 중점으로 인식 이미지 데이터 확인해보기 Numpy, PIL, tensorflow.keras 등을 이용하여 이미지를 Numpy 배열로 바꿔보고, 이를 통해 이미지가 어떻게 이루어졌는지 확인 import pandas as pd import numpy as np import PIL import matplotlib.image as img import matplotlib.pyplot as plt from elice_utils import EliceUtils elice_utils = Elic..

[Python] 딥러닝 학습 속도 문제와 최적화-2

초기값 설정 초기값을 잘못 설정한다면 sigmoid를 통하고 하면서 w값을 가야되는데, 초기값에서 크게 벗어나지 못하는 문제가 발생 초기값을 잘 설정하는게 중요함 모델을 여러번 학습하다 보니, 학습된 모델이 다르게 나오게 된다. Weight Initializtion은 새로운 방법으로 여러 연구가 있었음 초기화 설정 문제 해결을 위한 Naïve한 방법 -표준 정규분포를 이용해 초기화 -표준편차를 0.01로 하는 정규분포로 초기화 Nural Net 굉장히 크고 노드가 많다면 하나의 레이어에 잇는 100개의 Normal한 Naive한 방법인 평균0 표준편차 1인 정규화 방법을 쓰면, 나중에는 양쪽 끝으로 몰리는 현상이 발생함 이러한 표준편차를 줄여보는 시도를 함 Xavier 초기화 방법 + Sigmoid 함수..