import keras
from keras.optimizers import SGD
from keras.optimizers import Adam
from keras.models import Sequential
from keras.layers import Activation, Dense, Dropout
from keras.utils import np_utils
from keras.utils.np_utils import to_categorical
from keras.callbacks import Callback
from keras.callbacks import EarlyStopping
from keras.callbacks import ModelCheckpoint
import numpy as np
import random
import matplotlib.pyplot as plt
from PIL import Image
import os
import os.path
import sys
optpara=0.05
# オプティマイザ
opt = SGD(lr=optpara)
#opt = Adam(lr=optpara, beta_1=0.9, beta_2=0.999, epsilon=None, decay=0.0, amsgrad=False)
epochs=100000
image_list = []
label_list = []
image_list2 = []
label_list2 = []
a="triangle3"
b="circle2"
a2="t2"
b2="c2"
for dir in os.listdir("shape3"):
if dir == "/.DS_Store":
continue
dir1 = "shape3/" + dir
label = 0
if dir == a:
label = 0
elif dir == b:
label = 1
else:
continue
for file in os.listdir(dir1):
if file != ".DS_Store":
label_list.append(label)
filepath = dir1 + "/" + file
image = np.array(Image.open(filepath).convert("L").resize((28, 28)))
image = image.reshape(1, 784).astype("float32")[0]
image_list.append(image / 255.)
for dir in os.listdir("shape4"):
if dir == "/.DS_Store":
continue
dir1 = "shape/" + dir
label2 = 0
if dir == "t2":
label2 = 0
elif dir == "c2":
label2 = 1
else:
continue
for file in os.listdir(dir1):
if file != ".DS_Store":
label_list2.append(label2)
filepath = dir1 + "/" + file
image2 = np.array(Image.open(filepath).convert("L").resize((28, 28)))
image2 = image2.reshape(1, 784).astype("float32")[0]
image_list2.append(image2 / 255.)
image_list = np.array(image_list)
image_list2 = np.array(image_list2)
Y = to_categorical(label_list)
Y2 = to_categorical(label_list2)
rand=random.randint(0,1000000)
np.random.seed(rand)
np.random.shuffle(image_list)
np.random.seed(rand)
np.random.shuffle(Y)
rand2=random.randint(0,1000000)
np.random.seed(rand2)
np.random.shuffle(image_list2)
np.random.seed(rand2)
np.random.shuffle(Y2)
dust,image_list00,image_list01,image_list02,image_list04=np.split(image_list, [10200,11500,12500,12500])
image_list20,image_list21,image_list22=np.split(image_list2, [0,1300])
image_list03=np.concatenate([image_list00, image_list20])
dust,Y00,Y01,Y02,Y04=np.split(Y, [10200,11500,12500,12500])
Y20,Y21,Y22=np.split(Y2, [0,1300])
Y03=np.concatenate([Y00, Y20])
image_list02=np.concatenate([image_list02, image_list22])
Y02=np.concatenate([Y02, Y22])
model = Sequential()
model.add(Dense(640, input_shape=(784,)))
model.add(Activation("relu"))
model.add(Dropout(0.2))
model.add(Dense(640, activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(640, activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(2))
model.add(Activation("softmax"))
model.compile(loss="binary_crossentropy", optimizer=opt, metrics=["accuracy"])
es_cb = EarlyStopping(monitor='val_acc',min_delta=0, patience=100, verbose=1, mode='auto')
modelCheckpoint = ModelCheckpoint(filepath = 'model1.h5',
monitor='val_acc',
verbose=1,
save_best_only=True,
save_weights_only=False,
mode='auto',
period=1)
result11=model.fit(image_list03, Y03, epochs=epochs, batch_size=64,validation_split=0.5,callbacks=[ modelCheckpoint,es_cb])
val_acc1 = result11.history['val_acc']
val_loss1 = result11.history['val_loss']
model2 = Sequential()
model2.add(Dense(640, input_shape=(784,)))
model2.add(Activation("relu"))
model2.add(Dropout(0.2))
model2.add(Dense(640, activation='relu'))
model2.add(Dropout(0.2))
model2.add(Dense(640, activation='relu'))
model2.add(Dropout(0.2))
model2.add(Dense(2))
model2.add(Activation("softmax"))
if os.path.exists("./model1.h5"):
model2.load_weights("model1.h5", by_name=False)
c=1
total = 0.
ok_count = 0.
a_split = np.split(image_list02, 100)
b_split = np.split(Y02, 100)
d=np.array([[1,0]])
for i in range(100):
result=model2.predict_classes(a_split[i])
if (b_split[i]==d).all():
c=0
if (b_split[i]!=d).all():
c=1
total += 1.
if c==result[0]:
ok_count += 1.
print(b_split[i])
print("label:", c, "result:", result[0])
print("seikai: ", ok_count / total * 100, "%")
with open('acc11.txt', mode='w') as f:
f.write(str(ok_count / total * 100))
if os.path.exists("./model1.h5"):
model2.load_weights("model1.h5", by_name=False)
c=1
total = 0.
ok_count = 0.
a2_split = np.split(image_list04, 100)
b2_split = np.split(Y04, 100)
d=np.array([[1,0]])
for i in range(100):
result=model2.predict_classes(a2_split[i])
if (b2_split[i]==d).all():
c=0
if (b2_split[i]!=d).all():
c=1
total += 1.
if c==result[0]:
ok_count += 1.
print(b2_split[i])
print("label:", c, "result:", result[0])
print("seikai: ", ok_count / total * 100, "%")
with open('acc12.txt', mode='w') as f:
f.write(str(ok_count / total * 100))
np.savetxt('val_acc1.txt', val_acc1, fmt='%.5f')
np.savetxt('val_loss1.txt', val_loss1, fmt='%.5f')