CNN: 합성곱을 이용하여 이미지 예측
# 함수 불러오기
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import random as rd
import cv2, os # cv2 : OpenCV
from sklearn.model_selection import train_test_split
from sklearn.metrics import *
from keras.models import Sequential
from keras.layers import Dense, Flatten, Conv2D, MaxPooling2D, Input
from keras.backend import clear_session
from keras.optimizers import Adam
from keras.datasets import mnist, fashion_mnist
Input shape = (28, 28, 1): 1은 흑백, 3은 컬러
model = Sequential([Input(shape = (28, 28, 1))])
Convolutional Layer: 필터로 지역적 특성 추출
# 컨볼루션 레이어
Conv2D(16, kernel_size = 3, padding='same', activation='relu'), # strides = 1(기본값,1)
# 16개 층
# 커널 크기 3*3 --> 9개로 된 특징으로 합성곱 비교(2차원 이동) --> 9개로 된 특성 맵 생성
# strides = 1 (한칸씩 이동)
# padding: 패딩을 입혀 사이즈 유지
Max Pooling Layer: 뽑은 특징을 요약
MaxPooling2D(pool_size = 2 )
# pool_size = 2: 2*2로 특징 요약
# strides = 2(기본값이 pool_size 동일)
Flatten: 뽑은 특징을 펼쳐 다음 레이어로 연결
Flatten()
# 1차원으로 펼침
그림판으로 쓴 숫자 맞추기
# 함수 불러오기
import cv2
from google.colab.patches import cv2_imshow
# 파일 열기
img = cv2.imread('3.png', cv2.IMREAD_GRAYSCALE)
cv2_imshow(img)
print(img.shape)
# 크기 조절하기
img = cv2.resize(255-img, (28, 28))
print(img.shape)
cv2_imshow(img)
# 입력데이터 형식을 갖추기
test_num = img.reshape(1,28,28,1) / 255. # 구조 잡고 스케일링!
# 예측하기
pred = model_3.predict(test_num)
pred_1 = pred.argmax(axis=1)
print(pred_1)