ここで問題があります。問題は分類レポートにあります。予測は正しくないようです。問題がどこにあるのかわかりません。
誰でも私を助けることができますか?
これが私のコードです:
from keras.preprocessing.image import ImageDataGenerator
aug = ImageDataGenerator(rescale=1./255,
shear_range=0.2,
horizontal_flip=True,
rotation_range=45,
vertical_flip=True,
fill_mode='nearest',
height_shift_range=0.5,
width_shift_range=0.5
)
training_set = aug.flow_from_directory("/content/drive/My Drive/RESEARCH CENTER/Dataset/train",
target_size=(224,224),
color_mode="rgb",
shuffle=True,
class_mode='binary')
validation_set = aug.flow_from_directory("/content/drive/My Drive/RESEARCH CENTER/Dataset/test",
target_size=(224,224),
color_mode="rgb",
shuffle=True,
class_mode='binary')
from tensorflow.keras.models import Sequential
from tensorflow.keras import regularizers
from tensorflow.keras.layers import InputLayer, Dense, Conv2D, AvgPool2D, Flatten, BatchNormalization, Dropout, MaxPooling2D
from tensorflow.keras.optimizers import Adam
from keras import models
# Feature Extraction Layer
model = Sequential()
model.add(InputLayer(input_shape=[224,224,3]))
model.add(Conv2D(filters=16, kernel_size=3, strides=1, padding='same', activation='relu'))
model.add(BatchNormalization())
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Conv2D(filters=32, kernel_size=3, strides=1, padding='same', activation='relu'))
model.add(BatchNormalization())
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Conv2D(filters=64, kernel_size=3, strides=1, padding='same', activation='relu'))
model.add(BatchNormalization())
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Conv2D(filters=128, kernel_size=3, strides=1, padding='same', activation='relu'))
model.add(BatchNormalization())
model.add(MaxPooling2D(pool_size=(2,2)))
#model.add(Conv2D(filters=256, kernel_size=3, strides=1, padding='same', activation='relu'))
#model.add(BatchNormalization())
#model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Dropout(0.2))
model.add(Flatten())
# Fully Connected Layer
model.add(Dense(256, activation='relu'))
model.add(Dropout(0.3))
model.add(Dense(1, activation='sigmoid'))
print(model.summary())
model.compile(optimizer=Adam(lr=0.001),
loss='binary_crossentropy',
metrics=['acc'])
H = model.fit(training_set,
steps_per_epoch=int(len(training_set)),
epochs=1000,
validation_data=validation_set,
validation_steps=int(len(validation_set)),
callbacks=[tensorboard_callback])
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
plt.style.use("ggplot")
plt.figure()
plt.plot(np.arange(0, 1000), H.history["loss"], label="train_loss")
plt.plot(np.arange(0, 1000), H.history["val_loss"], label="val_loss")
plt.title("Loss Plot")
plt.xlabel("Epoch #")
plt.ylabel("Loss")
plt.ylim([0.0,15.0])
plt.legend()
plt.show()
plt.style.use("ggplot")
plt.figure()
plt.plot(np.arange(0, 1000), H.history["acc"], label="train_acc")
plt.plot(np.arange(0, 1000), H.history["val_acc"], label="val_acc")
plt.title("Accuracy Plot")
plt.xlabel("Epoch #")
plt.ylabel("Acc")
plt.ylim([-3,3.0])
plt.legend()
plt.show()
from sklearn.metrics import classification_report, confusion_matrix
from sklearn import metrics
import numpy as np
ypred = model.predict(validation_set, verbose=1)
labels = (ypred > 0.5).astype(np.int)
print(metrics.classification_report(validation_set.classes,labels))
しかし、精度は正しくないようで、トレーニングでは 0-% のように表示されますが、分類レポートではわずか 50% です