Python Keras ImageDataGenerator流目录有3D CNN数据格式错误?

Python Keras ImageDataGenerator流目录有3D CNN数据格式错误?,python,tensorflow,keras,convolutional-neural-network,Python,Tensorflow,Keras,Convolutional Neural Network,我是Keras的新手,我有一个数据集,其中有多个文件夹,每个文件夹都指向一个特定的类。我使用ImageDataGenerator从子文件夹读取数据。 我尝试使用16个大小为80x100的连续帧,因此输入的_形状是(16,80,100,1)。 当我进行训练时,网络的输入有错误,我知道输入应该是3D CNN的5d张量,但我不确定是否正确 我正在使用spyder编写和实现代码: from keras.preprocessing.image import ImageDataGenerator from

我是Keras的新手,我有一个数据集,其中有多个文件夹,每个文件夹都指向一个特定的类。我使用ImageDataGenerator从子文件夹读取数据。 我尝试使用16个大小为80x100的连续帧,因此输入的_形状是(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)
错误显示:

文件“C:\Users\AA\AppData\Local\Continuum\Anaconda3\lib\site packages\keras\engine\training.py”,第113行,输入数据
“带形状”+str(数据形状))
ValueError:检查输入时出错:预期conv3d_24_输入有5个维度,但得到了形状为(32、80、100、1)的数组

模型将您的输入解释为16个80x100灰度图像样本。您必须根据需要重新设置输入的形状

(no_of_samples,16,80,100,1)

这里有16个时间步

我认为问题在于
图像数据生成器

它只适用于图像,不适用于视频(我也有同样的错误,当时他们还声称,
ImageDataGenerator
只适用于图像形状的张量。他们还建议实现中所述的自己的数据生成,但我自己没有尝试过)

这是一个定制的imagedatagenerator,用于将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)

任何有用的注释!感谢您的回复,样本数本身就是列车数据吗?当我试图重新塑造列车_数据,但仍然发生错误,即使我使用相同的重塑功能。或者我应该在输入中把这个结构写成:ins=(没有样本,16,80100,1)。。谢谢,我的意思是如果你有32张图片,那么你将有2个16帧的序列。所以你的形状是(2,16,80100,1)。因此,你必须重塑它。只是您必须注意获得正确的序列,因为您无法控制ImageDataGeneratorI的顺序。我已尝试将输入形状更改为(样本,80,100,16,1),但存在一个错误,预期为5d,但发现为6d。此外,我还尝试使用XX=(train_data.samples,80100,16,1),但有一个错误表示tuple对象不是迭代器。我也尝试过这样做,但没有办法重塑列车数据!!用户239457,我忘了提到samples=193,伙计们,我如何重塑它?我只是遇到了这个错误,我用2D conv测试了它,它工作正常。链接更新为