일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 자연어 전처리
- cnn
- 원-핫 인코딩
- 입력층
- KONLPY
- 코랩
- 시계열 분석
- 딥러닝
- 프로그래머스
- 완전연결층
- 텍스트 마이닝
- 이미지 분류
- 카운트 벡터
- 코딩테스트
- 생성모델
- 망각 게이트
- RNN
- 과적합
- 임베딩
- 합성곱층
- 양방향 RNN
- 성능 최적화
- COLAB
- 출력층
- 합성곱 신경망
- 순환 신경망
- 풀링층
- 전이학습
- NLTK
- 클러스터링
Archives
- Today
- Total
Colab으로 하루에 하나씩 딥러닝
합성곱 신경망_5.이미지 분류를 위한 신경망_3)VGGNet 본문
728x90
VGGNet(브이지지넷)
- 작은 필터를 사용하는 대신 깊은 신경망을 만들자!
- 신경망이 깊어질수록 수용 영역이 넓어지는 원리를 이용
- 필터를 작게 만들어서 파라미터 수를 줄이고 대신 신경망을 깊게 하여 수용 영역이 충분하도록 설계
- 모델 구조(11 계층 ~ 13 계층, 16 계층, 19 계층)
- VGG16: 16 계층 모델이 가장 많이 사용되며, VGG19보다 파라미터 수는 적지만 성능 차가 크지 않음
- VGG16 모델 구조: 5개의 그룹 Conv1-Conv2-Conv3-Conv4-Conv5이 완전 연결 계층으로 연결되는 구조
- FC7: 출력 직전의 계층으로, 이미지 표현이 가장 추상화된 상태로 이미지를 설명하는 콘텍스트 벡터로 쓰임
VGGNet(브이지지넷) 실습(VGG19)
### 라이브러리 호출
%load_ext tensorboard
import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt
import cv2
from tensorflow.keras import Model
from tensorflow.keras.models import Sequential
from tensorflow.keras.utils import to_categorical
from tensorflow.keras.losses import categorical_crossentropy
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.layers import Dense, Flatten, Conv2D, MaxPooling2D, Dropout
### VGG19 네트워크 생성
from typing_extensions import Self
class VGG19(Sequential):
def __init__(self, input_shape):
super().__init__()
self.add(Conv2D(64, kernel_size=(3,3), padding='same',
activation='relu', input_shape=input_shape))
self.add(Conv2D(64, kernel_size=(3,3), padding='same',
activation='relu'))
self.add(MaxPooling2D(pool_size=(2,2), strides=(2,2)))
self.add(Conv2D(128, kernel_size=(3,3), padding='same',
activation='relu'))
self.add(Conv2D(128, kernel_size=(3,3), padding='same',
activation='relu'))
self.add(MaxPooling2D(pool_size=(2,2), strides=(2,2)))
self.add(Conv2D(256, kernel_size=(3,3), padding='same',
activation='relu'))
self.add(Conv2D(256, kernel_size=(3,3), padding='same',
activation='relu'))
self.add(Conv2D(256, kernel_size=(3,3), padding='same',
activation='relu'))
self.add(Conv2D(256, kernel_size=(3,3), padding='same',
activation='relu'))
self.add(MaxPooling2D(pool_size=(2,2), strides=(2,2)))
self.add(Conv2D(512, kernel_size=(3,3), padding='same',
activation='relu'))
self.add(Conv2D(512, kernel_size=(3,3), padding='same',
activation='relu'))
self.add(Conv2D(512, kernel_size=(3,3), padding='same',
activation='relu'))
self.add(Conv2D(512, kernel_size=(3,3), padding='same',
activation='relu'))
self.add(MaxPooling2D(pool_size=(2,2), strides=(2,2)))
self.add(Conv2D(512, kernel_size=(3,3), padding='same',
activation='relu'))
self.add(Conv2D(512, kernel_size=(3,3), padding='same',
activation='relu'))
self.add(Conv2D(512, kernel_size=(3,3), padding='same',
activation='relu'))
self.add(Conv2D(512, kernel_size=(3,3), padding='same',
activation='relu'))
self.add(MaxPooling2D(pool_size=(2,2), strides=(2,2)))
self.add(Flatten())
self.add(Dense(4096, activation='relu'))
self.add(Dropout(0.5))
self.add(Dense(4096, activation='relu'))
self.add(Dropout(0.5))
self.add(Dense(1000, activation='softmax'))
self.compile(optimizer=tf.keras.optimizers.Adam(0.003),
loss='categorical_crossentropy',
metrics=['accuracy'])
### VGG19 모델 출력
model = VGG19(input_shape=(224, 224, 3))
model.summary()
### Git에서 데이터 가져오기
!git clone https://github.com/gilbutITbook/080263.git
2022.12.29 - [Colab_사용팁] - Colab에서 Kaggle 데이터 바로 사용하기
Colab에서 Kaggle 데이터 바로 사용하기
1. 본인 Kaggle 계정에 접속하여 API Token 생성 오른쪽 자신의 계정을 클릭한 후, 'Account'에 접속 이후, 'Create New API Token'을 클릭 후에 로컬에 다운로드 2. Colab에서 본인 API Token 등록 ### kaggle 라이브러
elleik.tistory.com
위에 첨부한 글을 토대로 Kaggle에서 API를 가져와서 사전 훈련된 VGG19 모델을 가져옵니다.
### Colab에서 본인 API Token 등록
!pip install kaggle
from google.colab import files
files.upload()
### 등록된 API Token 파일 이동
!mkdir -p ~/.kaggle
!cp kaggle.json ~/.kaggle/
VGG-19
VGG-19 Pre-trained Model for Keras
www.kaggle.com
해당 사이트에서 직접 다운로드를 받고 진행할 수 있습니다.
# 사전 훈련된 VGG19 모델의 가중치 내려받기
!kaggle datasets download -d keras/vgg19
### .zip 파일 압축 풀기
!unzip /content/vgg19.zip
### 사전 훈련된 VGG19 가중치 내려받기 및 클래스 정의
model.load_weights("/content/vgg19_weights_tf_dim_ordering_tf_kernels.h5")
classes = {282:'cat',
681:'notebook, notebook computer',
970: 'alp'}
### 이미지 호출 및 예측
image1 = cv2.imread("/content/080263/chap6/data/cat.jpg")
image1 = cv2.resize(image1, (224,224))
plt.figure()
plt.imshow(image1)
image1 = image1[np.newaxis, :]
predicted_value = model.predict(image1) # 설명 1
predicted_value = np.argmax(predicted_value)
plt.title(classes[predicted_value])
참고: 서지영, 『딥러닝 텐서플로 교과서』, 길벗(2022)
'딥러닝_개념' 카테고리의 다른 글
시계열 분석_1.시계열 문제 & AR, MA, ARMA, ARIMA (0) | 2023.01.12 |
---|---|
합성곱 신경망_5.이미지 분류를 위한 신경망_5)GoogLeNet & ResNet (0) | 2023.01.11 |
합성곱 신경망_5.이미지 분류를 위한 신경망_2)AlexNet (1) | 2023.01.09 |
합성곱 신경망_5.이미지 분류를 위한 신경망_1)LeNet-5 (2) | 2023.01.06 |
합성곱 신경망_4.CNN 시각화 (0) | 2023.01.05 |