0

ここで問題があります。問題は分類レポートにあります。予測は正しくないようです。問題がどこにあるのかわかりません。

誰でも私を助けることができますか?

これが私のコードです:

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% です

4

0 に答える 0