Увеличение набора данных файла CSV с использованием Keras - PullRequest
0 голосов
/ 09 января 2020

Я работаю над уже реализованным проектом в Kaggle , который имеет отношение к Классификация изображений . У меня есть 6 классов, которые можно предсказать: Angry, Happy, Sad et c. Я реализовал модель CNN, и в настоящее время я использую только 4 класса (классы с наибольшим количеством изображений), но моя модель переоснащается, моя точность проверки достигает 53% максимум, поэтому я пробовал несколько вещей, но, казалось бы, не улучшал моя точность Теперь я видел, как люди упоминали что-то, называемое Увеличение данных , и думали дать ему go, поскольку это может повысить точность. Однако я застрял с ошибкой, которую я не могу понять.

Распределение набора данных:

6_classes

from tensorflow.keras.preprocessing.image import ImageDataGenerator
from matplotlib.pyplot import imread, imshow, subplots, show


def plot(data_generator):
    """
    Plots 4 images generated by an object of the ImageDataGenerator class.
    """
    data_generator.fit(df_training)
    image_iterator = data_generator.flow(df_training)

    # Plot the images given by the iterator
    fig, rows = subplots(nrows=1, ncols=4, figsize=(18,18))
    for row in rows:
        row.imshow(image_iterator.next()[0].astype('int'))
        row.axis('off')
    show()

x_train = df_training.drop("emotion",axis=1)
image = x_train[1:2].values.reshape(48, 48)
x_train = x_train.values.reshape(x_train.shape[0], 48, 48,1)
x_train = x_train.astype("float32")
image = image.astype("float32")
image = x_train[1:2].reshape(48, 48)

# Creating a dataset which contains just one image.
images = image.reshape((1, image.shape[0], image.shape[1]))

imshow(images[0])
show()
print(x_train.shape)
data_generator = ImageDataGenerator(rotation_range=90)
plot(data_generator)

Ошибка:

ValueError: вход в .fit() должен иметь ранг 4. Получил массив с формой: (28709, 2305)

Я уже преобразовал свои данные в 4d массив, но для какая-то причина в ошибке появляется, так как мои данные 2d. Это форма print(x_train.shape) => (28709, 48, 48, 1)

x_train, где находится набор данных, x_train [1: 2] для доступа к одному изображению.

PS Есть ли другой подход, который вы бы порекомендовали улучшить мою точность в соответствии с этим набором данных. Если у вас есть дополнительные вопросы о моем наборе данных, пожалуйста, сообщите мне, если вы что-то не поняли в этом частичном коде.

1 Ответ

0 голосов
/ 09 января 2020

Вы используете ваш data_generator для df_training, а не для x_train.

Что касается дополнительных идей о том, как избежать переобучения: у Tensorflow есть официальное руководство по этому вопросу с некоторыми хорошими предложениями: https://www.tensorflow.org/tutorials/keras/overfit_and_underfit

...