如何解决TimeDistributed输入形状问题(需要5维)

时间:2019-04-14 13:13:12

标签: python keras valueerror

我正在尝试创建人类动作识别模型。但是,当我尝试添加TimeDistributed功能时,出现了input_shape问题。如何将input_shape从4d转换为5d?

我想每10张图像训练一次数据集,以了解动作。

数据集大小=(28000,90,90,1)

#define CNN model
cnn = Sequential()
cnn.add(Conv2D(filters=32,kernel_size= 
(5,5),padding="Same",activation="relu",input_shape=(90,90,1)))
cnn.add(MaxPooling2D(pool_size=(2,2)))
cnn.add(Dropout(0.25))

cnn.add(Conv2D(filters=16,kernel_size=(5,5),padding="Same",activation="relu"))
cnn.add(MaxPooling2D(pool_size=(2,2)))
cnn.add(Dropout(0.25))

cnn.add(Conv2D(filters=32,kernel_size=(5,5),padding="Same",activation="relu"))
cnn.add(MaxPooling2D(pool_size=(2,2)))
cnn.add(Dropout(0.25))

cnn.add(Flatten())
cnn.add(Dense(4096, activation="relu"))

#define LSTM model
model = Sequential()
model.add(TimeDistributed(cnn,input_shape=(10,90,90,1)))
model.add(LSTM(10))
model.add(Dense(2, activation="softmax"))

verbose, epochs, batch_size = 0, 25, 64
optimizer=Adam(lr=0.001,beta_1=0.9,beta_2=0.999)
model.compile(optimizer=optimizer,loss="binary_crossentropy",metrics=["accuracy"])
model.fit(x_train, y_train,validation_data=(x_val,y_val), epochs=epochs, batch_size=batch_size)

以下错误: ValueError:检查输入时出错:预期time_distributed_8_input具有5个维,但数组的形状为(28000,90,90)

1 个答案:

答案 0 :(得分:0)

我有同样的问题。我正在使用TensorFlow 2.0 alpha中的Tensorflow.keras。我的输入数据是通过以下方式形成的: (list, list, numpy.ndarray, numpy.ndarray, numpy.ndarray)对应于number of records in batch, number of timesteps, img_width, img_height, channels

结果证明,Tensorflow输入形状验证代码实际上错过了以下情况:给定记录的输入形状是从包含list的{​​{1}}构建的,而numpy arrays维是剥去。它确实可以处理几乎所有其他形式的数据。

我在本地修改了Tensorflow库代码以对其进行修复,并报告了此修复程序(https://github.com/tensorflow/tensorflow/issues/28323,我希望本周对此进行修复并提交给TF)。

也就是说-我认为,如果将输入数据集更改为由list组成的形式,则可能会解决您遇到的问题。