Почему моя точность вычисления keras составляет 80%, а вычисленная вручную - 50%? - PullRequest
0 голосов
/ 24 февраля 2020

У меня проблема с моей моделью. После обучения и сохранения я загрузил свою модель и попытался предсказать классы изображений. Просто чтобы проверить это, я попробовал те же изображения, которые я использовал для обучения модели.

from tensorflow.keras.models import load_model
from keras.preprocessing.image import ImageDataGenerator
import csv

model = load_model('newmodel.h5')

#training and validation dataset
train_dir = "ROIClassifier/data/train/"
train_image_generator = ImageDataGenerator(rescale=1./255) # Generator for our training data
train_dataset = train_image_generator.flow_from_directory(directory=train_dir,
                                                          target_size= (128,128),
                                                          classes=['tumor', 'stroma'],
                                                          class_mode='binary',
                                                          )

validation_image_generator = ImageDataGenerator(rescale=1./255,
                                                )  # Generator for our training data
test_dir = "ROIClassifier/data/validation/"
validation_dataset = validation_image_generator.flow_from_directory(directory=test_dir,
                                                                    target_size= (128,128),
                                                                    classes=['tumor', 'stroma'],
                                                                    class_mode='binary')

results = model.predict_classes(train_dataset,  batch_size=None)
evaluation = model.evaluate(train_dataset)
print(train_dataset.class_indices)
# name of csv file
filename = "results.csv"
# field names
fields = ['ID', 'Class', 'Prediction']

with open(filename, 'w', newline='') as csvfile:
    # creating a csv writer object
    csvwriter = csv.writer(csvfile)
    # writing the fields
    csvwriter.writerow(fields)
    a = 0
    for i in range(0, 293):
        if train_dataset.classes[i]== int(*results[i]):
            a += 1
        csvwriter.writerow([i, train_dataset.classes[i], *results[i]])

Я загружаю модель, генерирую набор данных, прогнозирую классы и оцениваю модель. Наконец, я сохраняю csv (для создания статистики с помощью SPSS).

Оценка модели:

1/10 [==>...........................] - ETA: 2s - loss: 0.6935 - accuracy: 0.6562
 2/10 [=====>........................] - ETA: 1s - loss: 0.6839 - accuracy: 0.6875
 3/10 [========>.....................] - ETA: 1s - loss: 0.6657 - accuracy: 0.7188
 4/10 [===========>..................] - ETA: 1s - loss: 0.6388 - accuracy: 0.7812
 5/10 [==============>...............] - ETA: 0s - loss: 0.6361 - accuracy: 0.7812
 6/10 [=================>............] - ETA: 0s - loss: 0.6315 - accuracy: 0.7865
 7/10 [====================>.........] - ETA: 0s - loss: 0.6202 - accuracy: 0.7991
 8/10 [=======================>......] - ETA: 0s - loss: 0.6241 - accuracy: 0.7891
 9/10 [==========================>...] - ETA: 0s - loss: 0.6256 - accuracy: 0.7951
10/10 [==============================] - 1s 147ms/step - loss: 0.6205 - accuracy: 0.7959

Но только 50 процентов прогнозирования соответствуют фактическому классу. Почему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...