【发布时间】: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.]]
【问题讨论】:
-
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