使用tf.keras构建CNN分类数据集时遇AttributeError报错求助
问题原因
你报错是因为错误地从keras.preprocessing.image模块调用as_numpy_iterator——这个模块根本没有这个方法。在TensorFlow 2.7.0里,as_numpy_iterator是tf.data.Dataset对象的内置方法,或者可以通过tf.data.experimental.as_numpy_iterator来调用。
解决办法
方式1:用数据集对象自带的方法
假设你已经用image_dataset_from_directory生成了数据集dataset,直接调用它的as_numpy_iterator()方法就行:
import numpy as np import tensorflow as tf # 构建数据集 dataset = tf.keras.utils.image_dataset_from_directory( "你的图片文件夹路径", # 这里填你的参数,比如image_size=(224,224), batch_size=32等 ) # 获取NumPy迭代器 iterator = dataset.as_numpy_iterator() # 把批次数据合并成完整的数组 images = [] labels = [] for batch_img, batch_lbl in iterator: images.append(batch_img) labels.append(batch_lbl) images = np.concatenate(images, axis=0) labels = np.concatenate(labels, axis=0)
方式2:用TF实验性API(备选)
如果方式1有问题,试试这个:
iterator = tf.data.experimental.as_numpy_iterator(dataset) # 后续合并数组的代码和方式1完全一样
关键提醒
别再写from keras.preprocessing.image import as_numpy_iterator这种导入语句了,这就是触发错误的根源。另外可以用print(type(dataset))确认下,输出应该是<class 'tensorflow.python.data.ops.batch_op._BatchDataset'>,确保数据集对象是对的。
内容的提问来源于stack exchange,提问作者user9228288
相关产品推荐
相关产品推荐

