在使用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.
- A
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。
きりり 发布了5 篇原创文章 · 获赞 2 · 访问量 310 私信 关注