【TensorFlow2.0】 expected input_conv to have 4 dimensions, but got array... 错误解释和解决方法

在使用TensorFlow2.0中自带Keras进行训练的时候,输入的训练集为RGB三通道图像,然而配置好网络后使用 model.fit(x, ...)进行训练时却始终报如下错误

expected input_conv to have 4 dimensions, but got array... 

具体意思是输入的参数x需要输入4个参数,而训练输入却只有3个维度,我的图片维度为(192, 192, 3)。

解决过程

首先先去了解了一下fit函数的x究竟是什么,TensorFlow官网给出的解释如下

x: Input data. It could be:

  • A Numpy array (or array-like), or a list of arrays (in case the model has multiple inputs).
  • A TensorFlow tensor, or a list of tensors (in case the model has multiple inputs).
  • A dict mapping input names to the corresponding array/tensors, if the model has named inputs.
  • tf.data dataset. Should return a tuple of either (inputs, targets) or (inputs, targets, sample_weights).
  • A generator or keras.utils.Sequence returning (inputs, targets) or (inputs, targets, sample weights).

X:输入数据。它应该为
Numpy数组(或类似数组) 或 如果模型有多个输入即数组列表。
如果模型有多个输入,即为TensorFlow张量或张量列表。
如果模型具有命名输入,则将输入名称映射到相应的数组/张量的字典。
tf.data数据集。应返回(INPUTS,TARGETS)或(INPUTS,TARGET,SAMPLE_WEIGHT)的元组。
生成器或keras.utils.Sequence返回(输入,目标)或(输入,目标,样本权重)。

结合其他讲解,了解到输入的数据应该是四个维度(数据集个数,Batch_Size 长度, 宽度, 通道数)

一开始我认为这就是仅仅一个四维的元组而已,就想着通过 tf.expand_dims() 函数为其添加一个维度

结果是的确添加了一个维度,图片变为(1, 192, 192, 3),然而还是有错误,便想把x的第一个参数改成Batch_Size的值却死活改不了,后来冷静下来想了一下,48*192*192*3怎么也不可能等于1*192*192*3,怎么改呀?

解决措施

使用 tf.stack 命令把输入的所有图片集合合并成一个tensor,就可以训练了。

因此对model.fit第一个参数x的理解应该是Batch_Size个数据集合并而成的tensor。

【TensorFlow2.0】 expected input_conv to have 4 dimensions, but got array... 错误解释和解决方法【TensorFlow2.0】 expected input_conv to have 4 dimensions, but got array... 错误解释和解决方法 きりり 发布了5 篇原创文章 · 获赞 2 · 访问量 310 私信 关注
上一篇:大牛证券公司比尔盖茨、李嘉诚都是股东!


下一篇:javascript-根据窗口大小调整页面元素的大小