#넘파이에서 불러와서 모델 구성
#성능 비교
import numpy as np
from keras.preprocessing.image import ImageDataGenerator #이미지데이터를 수치화
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Conv2D, Flatten
from tensorflow.keras.callbacks import EarlyStopping
from sklearn.metrics import accuracy_score
#1. 데이터
x_train = np.load('d:/study_data/_save/_npy/58_men_women_train_x.npy')
y_train = np.load('d:/study_data/_save/_npy/58_men_women_train_y.npy')
x_test = np.load('d:/study_data/_save/_npy/58_men_women_test_x.npy')
y_test = np.load('d:/study_data/_save/_npy/58_men_women_test_y.npy')
#print(x_train)
print(x_train.shape) #(100000, 28, 28, 1)
print(y_train.shape) #(100000,)
print(x_test.shape) #(10000, 28, 28, 1)
print(y_test.shape) #(10000,)
#2. 모델
model = Sequential()
model.add(Conv2D(32, (2,2), input_shape=(100, 100, 3), activation='relu'))
model.add(Conv2D(32, (2,2), activation='relu'))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dense(64, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
#3. 컴파일, 훈련
model.compile(loss = 'binary_crossentropy', optimizer='adam', metrics=['acc'])
es = EarlyStopping(monitor='val_acc',
mode = 'max',
patience=30,
verbose=1,
restore_best_weights=True,
)
hist = model.fit(x_train, y_train, epochs=5000,
validation_split=0.1,
shuffle=True,
batch_size = 256,
callbacks=[es],
)
result = model.evaluate(x_test,y_test)
print('result :', result)
pred = np.round(model.predict(x_test))
acc = accuracy_score(y_test, pred)
print('acc:',acc)