Каталог потока Keras ImageDataGenerator с ошибкой формата данных 3D CNN? - PullRequest
0 голосов
/ 08 мая 2018

Я новичок в Keras, у меня есть набор данных с несколькими папками, каждая из которых указывает на определенный класс. Я использовал ImageDataGenerator для чтения данных из подпапок. Я пытаюсь использовать 16 последовательных кадров размером 80x100, поэтому input_shape (16, 80, 100, 1). Когда я тренируюсь, появляется ошибка о входе сети, я знаю, что для 3D CNN вход должен быть 5d тензор, но я не уверен, правильно ли я это делаю.

Я использую spyder для написания и реализации кода:

from keras.preprocessing.image import ImageDataGenerator
from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation, Flatten, Conv3D, MaxPooling3D
from keras.layers.advanced_activations import LeakyReLU
from keras.optimizers import SGD, RMSprop
from keras.utils import np_utils, generic_utils
from keras.losses import categorical_crossentropy
from keras.optimizers import Adam
import os
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
import cv2
from sklearn.cross_validation import train_test_split
from sklearn import cross_validation
from sklearn import preprocessing

datagen = ImageDataGenerator()
train_data=datagen.flow_from_directory('C:\\Users\\AA\\Data\\Training', target_size=(80, 100), color_mode='grayscale', classes=None, class_mode='categorical', batch_size=32, interpolation='nearest')
test_data=datagen.flow_from_directory('C:\\Users\\AA\\Data\\Testing', target_size=(80, 100), color_mode='grayscale', classes=None, class_mode='categorical', batch_size=32, interpolation='nearest')



    ins = (16, 80, 100, 1)
    model = Sequential()
    model.add(Conv3D(32, kernel_size=(3, 3, 3), input_shape=ins, border_mode='same'))
    model.add(Activation('relu'))
    model.add(Conv3D(32, kernel_size=(3, 3, 3), border_mode='same'))
    model.add(Activation('softmax'))
    model.add(MaxPooling3D(pool_size=(3, 3, 3), border_mode='same'))
    model.add(Dropout(0.25))

    model.add(Conv3D(64, kernel_size=(3, 3, 3), border_mode='same'))
    model.add(Activation('relu'))
    model.add(Conv3D(64, kernel_size=(3, 3, 3), border_mode='same'))
    model.add(Activation('softmax'))
    model.add(MaxPooling3D(pool_size=(3, 3, 3), border_mode='same'))
    model.add(Dropout(0.25))

    model.add(Flatten())
    model.add(Dense(512, activation='sigmoid'))
    model.add(Dropout(0.5))
    model.add(Dense(8, activation='softmax'))


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


   model.fit_generator(train_data,
        steps_per_epoch=2000,
        epochs=50,
        validation_data=test_data,
        validation_steps=800)

Ошибка говорит:

File "C:\Users\AA\AppData\Local\Continuum\Anaconda3\lib\site-packages\keras\engine\training.py", line 113, in _standardize_input_data
    'with shape ' + str(data_shape))

ValueError: Error when checking input: expected conv3d_24_input to have 5 dimensions, but got array with shape (32, 80, 100, 1)

Ответы [ 3 ]

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

Я думаю, что проблема в ImageDataGenerator.

Это работает только для изображений, а не для видео (я получил ту же ошибку и на https://github.com/keras-team/keras/issues/10150 они также утверждают, что ImageDataGenerator работает только для тензоров в форме изображения. Там они также предлагают реализовать свой собственный генерация данных, как описано в https://stanford.edu/~shervine/blog/keras-how-to-generate-data-on-the-fly.html,, но я сам не пробовал)

0 голосов
/ 05 марта 2019

https://gist.github.com/Emadeldeen-24/736c33ac2af0c00cc48810ad62e1f54a

Вот пользовательский генератор изображений для 5D-ввода в сети Conv3D.Надеюсь, это поможет.

from tweaked_ImageGenerator_v2 import ImageDataGenerator
datagen = ImageDataGenerator()
train_data=datagen.flow_from_directory('path/to/data', target_size=(x, y), batch_size=32, frames_per_step=4)
0 голосов
/ 08 мая 2018

Модель интерпретирует ваши входные данные как 16 образцов изображений в оттенках серого 80x100. Вы должны изменить форму ввода как

(no_of_samples,16,80,100,1)

Здесь 16 ваши временные шаги

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