модель может легко сходиться, но результат прогноза очень плохой - PullRequest
0 голосов
/ 25 марта 2020

с помощью модели трансферного обучения, она очень легко сходилась в тензорном потоке, но брала одно изображение для предсказания, что результат неверен

Когда я даю обученное изображение для предсказания, оно также показывает неправильный результат

пакетный размер = 32 входной формы (32,256,256,3) выходной класс = 19

    base_model = tf.keras.applications.Xception(input_shape=(256, 256, 3),
                                                  include_top=False,
                                                   weights='imagenet')


    feature_batch = base_model(image_batch)


    global_average_layer = tf.keras.layers.GlobalAveragePooling2D()
    feature_batch_average = global_average_layer(feature_batch)


    prediction_layer = tf.keras.layers.Dense(19,activation=tf.nn.softmax)
    prediction_batch = prediction_layer(feature_batch_average)



    model = tf.keras.Sequential([
      base_model,
      tf.keras.layers.Dropout(0.5),
      global_average_layer,
      tf.keras.layers.Dropout(0.5),
      prediction_layer  
    ])

    base_learning_rate = 0.0001
    model.compile(optimizer=tf.keras.optimizers.Adam(),
                  loss=tf.keras.losses.CategoricalCrossentropy(),
                  metrics=['accuracy'])

    logdir="logs1/" + datetime.now().strftime("%Y%m%d-%H%M%S")
    tensorboard_callback = tf.keras.callbacks.TensorBoard(log_dir=logdir)

    model.fit_generator(train_ds,steps_per_epoch=100,epochs=20,validation_data=test_ds,validation_steps=100,callbacks=[tensorboard_callback])


import cv2
import matplotlib.pyplot as plt
img = cv2.imread('/content/drive/My Drive/Data/testimg.jpg')
plt.figure(figsize=(20,20))
ax = plt.subplot(5,5,1)
img = cv2.resize(img, (256,256))
img=img.reshape(0,256,256,3)
plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
predictions=model.predict(img)



    predictions = model.evaluate(test_ds,steps=50)

вывод оценки: 50/50 [========================= ==========] - 18 с 350 мс / шаг - потери: 9,8796e-06 - точность: 1,0000

Кривая точности

кривая потерь

1 Ответ

0 голосов
/ 26 марта 2020
  1. Ваша тренировка выглядит нормально, за исключением того, что модель перегружена. Возможно, Xception - это более крупная модель, чем вам нужно, попробуйте использовать меньшие базовые модели, такие как mobilenet_v2, попробуйте тренироваться для меньшего количества эпох.

  2. Используйте увеличение данных для увеличения ваших тренировочных выборок (в 2-3 раза ). https://github.com/mdbloice/Augmentor

  3. Точность вашего теста составляет 100%. Итак, ваша модель определенно в порядке.

output of evaluate: 50/50 [==============================] - 18s 350ms/step - loss: 9.8796e-06 - accuracy: 1.0000 

(1,00 == 100%)

Ваш метод вывода неверен. Для тестовых изображений необходимо применить ту же предварительную обработку, которую вы использовали во время тренировки.
import cv2
import matplotlib.pyplot as plt
import numpy as np
img = cv2.imread('/content/drive/My Drive/Data/testimg.jpg')
plt.figure(figsize=(20,20))
ax = plt.subplot(5,5,1)
img = cv2.resize(img, (256,256))
img=img.reshape(1,256,256,3) # img.reshape(0,256,256,3) <- this line should give you error
plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))

img = img/255. # only use this if you used the same pre-processing while training

predictions=model.predict(img)
print(predictions)
print(f'predicted class: {np.argmax(predictions[0])}')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...