首页 > 解决方案 > 带有 2D numpy 数组输入的 Tensorflow Keras Conv2D 错误

问题描述

我想使用 2D numpy 数组作为输入来训练 CNN,但我收到此错误:ValueError: Error when checking input: expected conv2d_input to have 4 dimensions, but got array with shape (21, 21).

我的输入确实是一个 21x21 的 numpy 浮点数组。网络的第一层被定义为Conv2D(32, (3, 3), input_shape=(21, 21, 1))匹配输入数组的形状。

我发现了一些类似的问题,但与二维输入数组无关,它们主要处理图像。根据文档,Conv2D 期望输入包含 的 4D 张量(samples, channels, rows, cols),但我找不到任何解释这些值含义的文档。与图像输入有关的类似问题建议使用 重塑输入数组np.ndarray.reshape(),但在尝试这样做时,我收到输入错误。

如何在这样的输入数组上训练 CNN?应该input_shape是不同大小的元组吗?

标签: pythontensorflowkerasdeep-learningconv-neural-network

解决方案


您当前的 numpy 数组具有维度(21, 21)。但是,TensorFlow 期望输入张量具有格式(batch_size, height, width, channels)BHWC的维度,这意味着您需要将 numpy 输入数组转换为4维(从当前的2维)。一种方法如下:

input = np.expand_dims(input, axis=0)
input = np.expand_dims(input, axis=-1)

现在,numpyinput数组具有维度:(1, 21, 21, 1)可以传递给 TF Conv2D 操作。

希望这可以帮助!:)


推荐阅读