检查输入时出错:预期 flatten_1_input 有 3 个维度,但得到了形状为 (28, 28) 的数组

Posted

技术标签:

【中文标题】检查输入时出错:预期 flatten_1_input 有 3 个维度,但得到了形状为 (28, 28) 的数组【英文标题】:Error when checking input: expected flatten_1_input to have 3 dimensions, but got array with shape (28, 28) 【发布时间】:2020-07-01 09:50:59 【问题描述】:

这是代码:

image = cv2.imread('MNIST_IMAGE.png')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
data = asarray(gray)
data=data/255.0
predictions=model.predict(data)

这是错误,我明白了:

ValueError Traceback(最近调用 最后)在 3 数据 = asarray(灰色) 4 数据=数据/255.0 ----> 5 个预测=model.predict(data)

~\Anaconda3\lib\site-packages\tensorflow_core\python\keras\engine\training.py 在预测(自我,x,batch_size,详细,步骤,回调, 最大队列大小,工人,使用多处理)1011 max_queue_size=max_queue_size,1012 个工人=工人, -> 1013 use_multiprocessing=use_multiprocessing) 1014 1015 def reset_metrics(self):

~\Anaconda3\lib\site-packages\tensorflow_core\python\keras\engine\training_v2.py 在预测(自我,模型,x,batch_size,详细,步骤,回调, max_queue_size, 工人, use_multiprocessing, **kwargs) 496 模型,ModeKeys.PREDICT,x=x,batch_size=batch_size,verbose=verbose, 497 步=步,回调=回调,max_queue_size=max_queue_size, --> 498 个工人=工人,use_multiprocessing=use_multiprocessing,**kwargs) 499 500

~\Anaconda3\lib\site-packages\tensorflow_core\python\keras\engine\training_v2.py 在_model_iteration(自我,模型,模式,x,y,batch_size,详细, sample_weight、steps、callbacks、max_queue_size、workers、 use_multiprocessing, **kwargs) 第424章 425名工人=工人, --> 426 使用_多处理=使用_多处理) 427 总样本 = _get_total_number_of_samples(适配器) 428 use_sample = total_samples 不是 None

~\Anaconda3\lib\site-packages\tensorflow_core\python\keras\engine\training_v2.py 在_process_inputs(模型,模式,x,y,batch_size,epochs, sample_weights,class_weights,shuffle,steps,distribution_strategy, max_queue_size、workers、use_multiprocessing) 第644章 645 x, y, sample_weights = 标准化( --> 646 x, y, sample_weight=sample_weights) 647 elif adapter_cls 是 data_adapter.ListsOfScalarsDataAdapter: 第648章

~\Anaconda3\lib\site-packages\tensorflow_core\python\keras\engine\training.py 在 _standardize_user_data(self, x, y, sample_weight, class_weight, batch_size、check_steps、steps_name、steps、validation_split、shuffle、 extract_tensors_from_dataset)2381 is_dataset=is_dataset, 第2382章 -> 2383 batch_size=batch_size) 2384 2385 def _standardize_tensors(self, x, y, sample_weight, run_eagerly, dict_inputs,

~\Anaconda3\lib\site-packages\tensorflow_core\python\keras\engine\training.py 在 _standardize_tensors(self, x, y, sample_weight, run_eagerly, dict_inputs、is_dataset、class_weight、batch_size)2408 feed_input_shapes, 2409 check_batch_axis=False, # 不要 强制执行批量大小。 -> 2410 exception_prefix='input') 2411 2412 # 获取输入数据的类型规范并在必要时对其进行清理。

~\Anaconda3\lib\site-packages\tensorflow_core\python\keras\engine\training_utils.py 在standardize_input_data(数据,名称,形状,check_batch_axis, 异常前缀) 571 ': 预期 ' + names[i] + ' 有 ' + 572 str(len(shape)) + ' 尺寸,但得到数组 ' --> 573 '带形状' + str(data_shape)) 574 如果不是 check_batch_axis: 第575章

ValueError:检查输入时出错:预期 flatten_1_input 到 有 3 个维度,但得到了形状为 (28, 28) 的数组

【问题讨论】:

【参考方案1】:

添加批次维度:

predictions = model.predict(data[None, ...])

或者像这样(两者是等价的):

predictions = model.predict(np.expand_dims(data, 0))

【讨论】:

也是批量维度,因为它是单个图像。预测 = model.predict(np.array([np.expand_dims(data, -1)])) @PratikRanjan 尝试:predictions = model.predict(data[None, ..., None])

以上是关于检查输入时出错:预期 flatten_1_input 有 3 个维度,但得到了形状为 (28, 28) 的数组的主要内容,如果未能解决你的问题,请参考以下文章

model.predict() == ValueError:检查输入时出错:预期 flatten_input 有 3 个维度,但得到的数组形状为 (1, 2)

ValueError:检查输入时出错:预期dense_1_input的形状为(180,),但数组的形状为(1,)

检查输入时出错:预期 lstm_1_input 的形状为 (71, 768) 但得到的数组形状为 (72, 768)

检查输入时出错:预期 lstm_1_input 有 3 个维度,但得到了形状为 (5, 3) 的数组

ValueError:检查输入时出错:预期dense_11_input 具有3 维,但得到了形状为(0, 1) 的数组

检查输入时出错:预期 conv2d_1_input 的形状为 (3, 32, 32) 但得到的数组的形状为 (32, 32, 3)