Как обучить модель CNN 2 классам по 100 образцов в каждом, а затем проверить ее на 200 новых образцах? - PullRequest
0 голосов
/ 24 апреля 2018

У меня есть 2 класса для моего тренировочного набора: образцы Birds (100 образцов) и no_birds (100).И набор тестов - без маркировки , состоящий из 200 тестовых образцов (смешанных с птицами и no_birds).Для каждого образца в тестовом наборе я намереваюсь классифицировать его как птицу или no_bird, используя CNN с Keras.

import numpy as np
import keras
from keras import backend as K
from keras.models import Sequential
from keras.layers import Activation
from keras.layers.core import Dense, Flatten
from keras.optimizers import Adam
from keras.metrics import categorical_crossentropy
from keras.preprocessing.image import ImageDataGenerator
from keras.layers.normalization import BatchNormalization
from keras.layers.convolutional import *
from sklearn.metrics import confusion_matrix
import itertools
import matplotlib.pyplot as plt

train_path = 'dataset/train_set'
test_path = 'dataset/test_set'

train_batches = ImageDataGenerator().flow_from_directory(train_path, target_size=(224,224), classes=['bird', 'no_bird'], batch_size=10) # bird directory consisting of 100 
test_batches = ImageDataGenerator().flow_from_directory(test_path, target_size=(224,224), classes=['unknown'], batch_size=10)

model = Sequential([
    Conv2D(32, (3, 3), activation='relu', input_shape=(224,224,3)),
    Flatten(),
    Dense(2, activation='softmax'),
])

model.compile(Adam(lr=.0001), loss='categorical_crossentropy', metrics=['accuracy'])

model.fit_generator(train_batches, steps_per_epoch=20, validation_data=test_batches, validation_steps=20, epochs=10, verbose=2)

Ошибка, которую я получаю на последнем шаге, такова:

ValueError: Error when checking target: expected dense_1 to have shape (2,) but got array with shape (1,)

Теперь я знаю, что это может быть связано с тем, что test_set имеет только 1 каталог, поскольку он не имеет метки.Поправьте меня если я ошибаюсь.Что я должен сделать, чтобы сделать эту работу?

Ответы [ 2 ]

0 голосов
/ 24 апреля 2018

Кажется, ваш тестовый набор немаркирован Удалить аргументы проверки из model.fit. Должно быть:

model.fit_generator(train_batches, steps_per_epoch=20, epochs=10, verbose=2)

Вы не можете проверить без меток.

0 голосов
/ 24 апреля 2018

строка test_batches = ImageDataGenerator().flow_from_directory(test_path, target_size=(224,224), classes=['unknown'], batch_size=10) неверна

Вы должны сделать test_batches = ImageDataGenerator().flow_from_directory(test_path, target_size=(224,224), classes=['bird', 'no_bird'], batch_size=10) еще.Таким образом, вы можете оценить свои прогнозы

следующую информацию:

, когда вы смотрите на https://keras.io/models/sequential/,, там говорится:

validation_data: tuple (x_val, y_val) или кортеж (x_val, y_val, val_sample_weights) для оценки потерь и любых метрик модели в конце каждой эпохи.Модель не будет обучаться на этих данных.Это переопределит validation_split.

Ваши тестовые данные должны совпадать с данными вашего поезда.Вам нужно организовать каталог тестовых данных так, чтобы он был структурирован так же, как и тренировочные данные

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