데이터 전처리가 끝난 후 64*64 = 4096 size의 data를 학습하는 CNN 모델을 생성
앞에 데이터 전처리 과정 코드가 frombuffer를
data = np.frombuffer(raw_data, dtype = np.uint8)
로 수정하여 데이터 재 추출 작업을 하였다. np.uint8로 추출 하게 되면
binary array -> img -> numpy array resize 결과 값과 동일하게 리사이징 되는 것을 확인 가능(gray scale로 추출할때)
아직까지 픽셀 하나 하나의 값이 0~255의 값이 저장이 되는대 img의 크기가 사이즈를 변경 할때 확대가 되었다 축소가 되었을 때 값이 정확히 어떻게 바뀌는지 어떠한 알고리즘이 사용되는지 확인을 하지 못하였다.
일단 간단하게 https://www.tensorflow.org/tutorials/images/cnn?hl=ko
예제의 CNN모델 코드를 가져다가 사용하여 결과 값을 바로 확인하도록 하겠다.
import numpy as np
import os
from tqdm import tqdm
import pandas as pd
from sklearn.model_selection import train_test_split
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout, Conv2D, MaxPooling2D, Flatten
import pickle
with open('./first_data.pkl','rb') as fr:
X = pickle.load(fr)
y = pickle.load(fr)
X = X.reshape(-1,64,64,1)
X = X/255.0
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
model = Sequential()
model.add(Conv2D(64, (3, 3), activation='relu', input_shape=(64,64, 1)))
model.add(MaxPooling2D((3, 3)))
model.add(Conv2D(32, (3, 3), activation='relu'))
model.add(Flatten())
model.add(Dense(16, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
model.summary()
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(X_train, y_train, epochs=10 ,batch_size = 10)
test_loss, test_acc = model.evaluate(X_test, y_test, verbose=1)
결과 값 : accuracy 0.9066으로 괜찮은 성능이 나오는 것을 확인
- 추후에 scaling 방법이나 resize값에 따라 어떻게 성능이 달라지는지 그리고 리사이징 알고리즘들을 확인 하는 것이 목표이다. 간단하게 tensorflow image generator를 사용하여 resize를 하는 방법이 있엇지만 자세한 방법을 알기 위해 직접 구현 해볼 예정이다.
'Machine Learning' 카테고리의 다른 글
.text section을 image resizing 후 CNN 모델생성(1) (0) | 2020.08.03 |
---|---|
pefile 악성코드 판단하는 CNN 모델 - 모델생성(2) (0) | 2020.07.31 |
Tensorflow cuDNN failed to initialize error 해결 (0) | 2020.07.31 |
pefile 악성코드 판단하는 CNN 모델 - 데이터 전처리 (0) | 2020.07.27 |
LightGBM, XGBoost gpu 가속 설정 (0) | 2020.07.22 |