Keras Prediction дает одинаковый результат для разных классов в тестовом наборе - PullRequest
0 голосов
/ 17 декабря 2018

все.

Я использую трансферное обучение, чтобы построить новую модель на основе моих собственных образцов.Основой обучения является Keras 2.0+.Я изменил коды со ссылкой на эту страницу: Точная настройка InceptionV3 для нового набора классов https://keras.io/applications/

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

>>> print(preds)
[[0.0000000e+00 4.5558951e-38 0.0000000e+00 0.0000000e+00 6.3798614e-36
  8.4623914e-22 1.0000000e+00 1.0636564e-11]]
>>> print(pred_classes)
6

Я тестирую 10 картинок из 8 классов, все дали класс 6.

Любые предложения?

Код обучения:

from keras.applications.inception_v3 import InceptionV3, preprocess_input
from keras.preprocessing import image
from keras.models import Model
from keras.layers import Dense, GlobalAveragePooling2D
from keras import backend as K
from keras.preprocessing.image import ImageDataGenerator

base_model = InceptionV3(weights='imagenet', include_top=False)
x = base_model.output
x = GlobalAveragePooling2D()(x)
x = Dense(1024, activation='relu')(x)
predictions = Dense(8, activation='softmax')(x)

model = Model(inputs=base_model.input, outputs=predictions)

for layer in base_model.layers:
    layer.trainable = False

model.compile(optimizer='rmsprop', loss='categorical_crossentropy',metrics=['accuracy'])

train_datagen=ImageDataGenerator(preprocessing_function=preprocess_input)
train_generator=train_datagen.flow_from_directory('./TranningSet',
                                                 target_size=(224,224),
                                                 color_mode='rgb',
                                                 batch_size=32,
                                                 class_mode='categorical',
                                                 shuffle=True)

step_size_train=train_generator.n//train_generator.batch_size
model.fit_generator(generator=train_generator,
                   steps_per_epoch=step_size_train,
                   epochs=100,
                   use_multiprocessing=True)

Конечная точность поезда немного низкая, но она составляет около 70%

50/50 [==============================] - 297s 6s/step - loss: 4.2306 - acc: 0.7040
Epoch 99/100
50/50 [==============================] - 303s 6s/step - loss: 3.7681 - acc: 0.7387
Epoch 100/100
50/50 [==============================] - 293s 6s/step - loss: 3.7569 - acc: 0.7443
<keras.callbacks.History object at 0x7fd931756bd0>
>>>

Код прогноза:

import keras
from keras import backend as K
from keras.preprocessing.image import ImageDataGenerator
from keras.preprocessing import image
from keras.models import Model
import numpy as np
from keras.models import load_model
from keras.applications.inception_v3 import preprocess_input

model = load_model('/root/AIdetection/Keras/V6.5/20181217_V6.5.h5')


from keras.preprocessing import image
img =image.load_img('/root/AIdetection/Keras/V6.5/TestSet/Healthy50/20181026.06.JPG', target_size=(224, 224))
x = image.img_to_array(img)
x *= (255.0/x.max())
image = np.expand_dims(x, axis = 0)
image = preprocess_input(image)
preds = model.predict(image)
pred_classes = np.argmax(preds)
print(preds)
print(pred_classes)

1 Ответ

0 голосов
/ 17 декабря 2018

Сбалансированы ли ваши тренировочные данные и вы перетасовываете их перед тренировкой?Другими словами, возможно ли, что большая часть ваших тренировочных данных относится к классу 6, и он учится просто предсказывать 6 каждый раз?

Также убедитесь, что ваш набор тестов находится в том же формате, что и ваш набор поездов.Делаете ли вы какой-либо тип обработки изображения перед передачей данных поезда в вашу модель?

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