【问题标题】:How to append multiple "'tensorflow.python.data.ops.dataset_ops.BatchDataset"?如何追加多个\"\'tensorflow.python.data.ops.dataset_ops.BatchDataset\"?
【发布时间】:2023-01-04 19:17:22
【问题描述】:

我的图像分类任务中有以下部分代码。对于此任务,我必须在文件夹中的图像上训练模型并测试模型并预测准确性

    import tensorflow
    import keras
    from tensorflow.keras import preprocessing

    data1 = preprocessing.image_dataset_from_directory("folder",label_mode="categorical",seed=0, image_size=(100,120))

    data2 = preprocessing.image_dataset_from_directory("folder",label_mode="categorical",seed=0, image_size=(100,120))

    type(data1)
    type(data2)

运行此代码后,结果将存储在 data1 和 data2 中

data1 和 data2 的类型是类 tensorflow.python.data.ops.dataset_ops.BatchDataset

我想将 data2 附加到 data1 以便我可以使用结果数据来训练模型。

我之前尝试过串联

` data1.连接(data2)

` 测试失败并抛出错误categorical_crossentropy target.shape.assert_is_compatible_with(output.shape) ValueError:形状(无,1)和(无,2)不兼容

我也试过np.append()在训练过程中失败并抛出以下错误

    ValueError: Failed to convert a NumPy array to a Tensor (Unsupported object type BatchDataset)

但是我必须使用 append 来链接数据 例如 数据1


    [(array([[[[165., 166., 170.],
         [165., 166., 170.],
         [165., 166., 170.],
         [158., 157., 155.],
         [158., 157., 155.],
         [157., 156., 154.]],

数据2


     [(array([[[[161., 165., 168.],
         [161., 165., 168.],
         [161., 165., 168.],
         [157., 160., 149.],
         [157., 160., 149.],
         [157., 160., 149.]],

附加数据应该是


    [(array([[[[165., 166., 170.],
         [165., 166., 170.],
         [165., 166., 170.],
         [158., 157., 155.],
         [158., 157., 155.],
         [157., 156., 154.]]
         [161., 165., 168.],
         [161., 165., 168.],
         [161., 165., 168.],
         [157., 160., 149.],
         [157., 160., 149.],
         [157., 160., 149.]]

我按照这个https://stackoverflow.com/questions/73934511/how-to-concatenate-tensorflow-python-data-ops-dataset-ops-batchdataset进行串联

【问题讨论】:

  • data1.concatenate(data2) 是对的。该错误是出于其他原因。
  • 但是串联与追加完全不同?连接如何替换 tensorflow.python.data.ops.dataset_ops.BatchDataset 的追加?
  • 数据集没有附加功能。尝试 list(data1.concatenate(data2)) 来检查它的输出。
  • 此 list(data1.concatenate(data2)) 将原始数据类型 tensorflow.python.data.ops.dataset_ops.BatchDataset 类型转换为 <class 'list'> 并在训练模型时抛出错误。错误消息是:在 _check_data_cardinality 中引发 ValueError:数据基数不明确:x 大小:32、32、32、32、32、32、32、32、32、32、32、32、32、32、32、32、32 , 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 28, 28, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32 , 32, 32, 32, 32, 32, 32, 32,32, 8, 8 确保所有数组包含相同数量的样本
  • list 仅用于检查数据集而不传递给您的代码。检查列表以查看其中的值,您将看到它按预期连接在一起。

标签: tensorflow append


【解决方案1】:

我已经执行了下面的代码

import tensorflow as tf
from tensorflow.keras import preprocessing

data1 = preprocessing.image_dataset_from_directory("/content/",label_mode="categorical",seed=0, image_size=(100,120))
output:Found 809 files belonging to 4 classes.


data2 = preprocessing.image_dataset_from_directory("/content/Pistachio_Image_Dataset",label_mode="categorical",seed=0, image_size=(100,120))
output:Found 2148 files belonging to 3 classes.


combined_dataset = data1.concatenate(data2)

该代码工作正常,不会产生任何错误。谢谢。

【讨论】:

    猜你喜欢
    • 2015-03-11
    • 1970-01-01
    • 2019-03-16
    • 2021-10-20
    • 1970-01-01
    • 2021-12-14
    • 2021-07-15
    • 2012-02-02
    • 2020-05-06
    相关资源
    最近更新 更多