我想使用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))
,以匹配输入数组的形状。
我发现了一些类似的问题,但都与2D输入数组无关,它们主要处理图像。根据文档,Conv2D期望输入包含(samples, channels, rows, cols)
的4D张量,但是我找不到任何解释这些值含义的文档。与图像输入有关的类似问题建议使用np.ndarray.reshape()
重塑输入数组,但尝试这样做时会收到输入错误。
如何在这样的输入阵列上训练CNN? input_shape
应该是其他大小的元组吗?
答案 0 :(得分:1)
您当前的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)
现在,numpy input
数组的尺寸为(1, 21, 21, 1)
,可以将其传递给TF Conv2D操作。
希望这会有所帮助! :)