如何重构/重新格式化包含要输入到 Tensorflow 的 model.fit() 中的图像的 Pandas 数据帧?

Posted

技术标签:

【中文标题】如何重构/重新格式化包含要输入到 Tensorflow 的 model.fit() 中的图像的 Pandas 数据帧?【英文标题】:How to restructure/reformat Pandas dataframe containing images to be fed into Tensorflow's model.fit()? 【发布时间】:2020-10-09 05:25:08 【问题描述】:

在预处理要输入到 Tensorflow 卷积神经网络的一组图像时,我创建了一个包含两列的 Pandas 数据框。

第一个包含 13200、1/255 重新缩放的图像(特别是它们各自的训练/测试和类目录的文件路径)填充到数据框中,这样,除非我将要显示的错误,否则应该准备好传统的 sklearn test_train_split。第二列包含与每个图像关联的类标签。这是数据框的样子:

(the dataframe)

现在,错误。在检查单个图像的形状时,我得到了正确的 (-,-,-) 尺寸,在检查整个 X_train 数据帧的形状时,我收到的输出是 (10560, )。与 CIFAR-10 数据集一样,我期望 (10560, 150, 150, 3) 的形状能够完全表示我的数据集的维度。无论我输入什么作为我的 Conv2D 层的 input_shape,我都会收到以下错误:

ValueError: Input 0 of layer sequential is incompatible with the layer: expected ndim=4, found ndim=2. Full shape received: [32, 1]

因此,我认为解决此错误的正确问题是如何重组和/或更改第 1 列中的图像输入,以便产生正确的数据集形状以符合模型拟合?

【问题讨论】:

【参考方案1】:

tf.keras.layers.Conv2D 层期望输入形状为4+D 张量,形状为:batch_shape + (channels, rows, cols),如果 data_format='channels_first' 或4+D 张量,形状:batch_shape + (rows, cols, channels),如果 data_format='channels_last'。 确保您的 X_train 是 4D 形状。

【讨论】:

以上是关于如何重构/重新格式化包含要输入到 Tensorflow 的 model.fit() 中的图像的 Pandas 数据帧?的主要内容,如果未能解决你的问题,请参考以下文章

用千位后的逗号分离重构复杂因子向量

如何解决“您输入的域名错误,请重新输入正确的域名或……的情况。”

工作一年,我重新理解了《重构》

如何使用参数将多个变量重构为一个?

如何使用IntelliJ IDEA来重构代码

win7格式化后要输入密码账号?