이미지를 데이터로 사용하기 위해선 이미지를 벡터로 변환하는 과정이 필요하다.
def load_data(img_path, number_of_data=1500):
# 가위바위보 이미지 개수 총합에 유의
# 가위 : 0, 바위 : 1, 보 : 2
img_size=28
color=3
#이미지 데이터와 라벨(가위 : 0, 바위 : 1, 보 : 2) 데이터를 담을 행렬(matrix) 영역을 생성
imgs = np.zeros(number_of_data*img_size*img_size*color,dtype=np.int32).reshape(number_of_data,img_size,img_size,color)
labels=np.zeros(number_of_data,dtype=np.int32)
np.zeros
np.reshape
가위, 바위, 보를 구분하는 문제이기 때문에 출력 벡터는 3개여야 함.
import tensorflow as tf
from tensorflow import keras
import numpy as np
n_channel_1=32
n_channel_2=32
n_dense=32
n_train_epoch=20
model=keras.models.Sequential()
model.add(keras.layers.Conv2D(n_channel_1, (3,3), activation='relu', input_shape=(28,28,3)))
model.add(keras.layers.MaxPool2D(2,2))
model.add(keras.layers.Conv2D(n_channel_2, (3,3), activation='relu'))
model.add(keras.layers.MaxPooling2D((2,2)))
model.add(keras.layers.Flatten())
model.add(keras.layers.Dense(n_dense, activation='relu'))
model.add(keras.layers.Dense(3, activation='softmax'))
keras
Sequential()
keras.layer.Conv2D(n_channel_1, (3,3), activation='relu', input_shape=(28,28,3)))
참고 (이미지 출처)
x0, x1, x2 부분: 입력된 이미지 (채널 수 1, 너비가 3, 높이가 3인 픽셀
w0, w1: 필터 = 가중치 부분. 2 * 2 인 커널Conv2D(1, (2, 2), input_shape = (3, 3, 1))
model.add(keras.layers.MaxPool2D(2,2))
model.add(keras.layers.Flatten())
keras.layers.Dense(n_dense, activation='relu')
- 입출력을 연결해주는 레이어
- 입력 뉴런이 4개, 출력 뉴런이 8개일 대 총 연결선은 32개, 가중치(연결 강도)도 32개
- n_dense: 출력 뉴런의 수
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])