Keras 3Dconvnet时序问题

时间:2019-01-30 20:48:10

标签: keras convolution

我有一个按时间顺序排列的数据,并且正在运行一些非常基本的测试,以了解TensorFlow,Keras,Python等。

要解决此问题,我有大量图像,其中7个图像数据(笛卡尔尺寸为33 x 33)在累积时应产生一个单一值。因此,“ x”数据的数量应为y * 7,其中y是被训练的“真实”数据。

所有训练数据都以名为“ alldatax”的形式存在,它是一个大型矩阵:[420420 x 33 x 33 x 7 x 1],其中维度是单个图像的总数,x维度,y维度,单个“真实”值要累积的图像数量,然后是3D卷积所需的最终尺寸。

“真相”矩阵alldatay是一维矩阵,仅是420420/7 = 60060。

运行简单的convnet时:

model = models.Sequential()
model.add(layers.InputLayer(input_shape=(33,33,7,1)))
model.add(layers.Conv3D(16,(3,3,1), activation = 'relu', input_shape = (33,33,7,1)))
model.add(layers.LeakyReLU(alpha=0.3))
model.add(layers.MaxPooling3D((2,2,1)))
model.add(layers.Conv3D(32,(3,3,1), activation = 'relu')) 
model.add(layers.LeakyReLU(alpha=0.3))
model.add(layers.MaxPooling3D((2,2,1)))
model.add(layers.Flatten())
model.add(layers.Dense(512, activation = 'relu'))
model.add(layers.LeakyReLU(alpha=0.3))
model.add(layers.Dropout(0.5))
model.add(layers.Dense(32, activation = 'relu'))
model.add(layers.LeakyReLU(alpha=0.3))
model.add(layers.Dropout(0.5))
model.add(layers.Dense(1, activation = 'relu'))

model.compile(optimizer = 'adam', loss = 'mse')
model.fit(x = alldatax, y = alldatay,  batch_size = 1000, epochs = 50, verbose = 1, shuffle = False)

我得到一个错误:ValueError:输入数组应具有与目标数组相同数量的样本。找到了420420个输入样本和60060个目标样本。

需要进行哪些更改才能使convnet意识到每个y值都需要7 * x?

1 个答案:

答案 0 :(得分:1)

在您的计算中似乎有些错误。 你指出神经网络应该采取7个33x33图像作为一个输入例子,所以你第一层的输入形状设定为(33,33,7,1),它是正确的。这意味着,对于每个33x33x7x1输入,应该恰好有一个y值。

因为所有的数据的所有数据包括:420420个33x33x7x1图像应该有420420个y值,而不是60060。