在尝试预处理我的数据集时,我不断遇到此错误:
AttributeError:“_PrefetchDataset”对象没有属性“shape”。您的意思是:“保存”吗?
我目前正在使用ResNet,但我也尝试过MobileNet和NasNet的预处理功能。它几乎看起来像是 imagenet_utils.py 的问题,但我认为情况并非如此。
除了切换到新应用程序之外,还有什么方法可以解决这个问题吗?
这是我的代码:
trainingdata = keras.utils.image_dataset_from_directory(
directory='archive/chest_xray/train/',
labels='inferred',
label_mode='int',
batch_size=32,
image_size=(512,512)
)
validationdata = keras.utils.image_dataset_from_directory(
directory='archive/chest_xray/test/',
labels='inferred',
label_mode='int',
batch_size=32,
image_size=(512,512)
)
td = keras.applications.resnet_v2.preprocess_input(trainingdata)
这是我的完整回溯:
Traceback (most recent call last):
File "C:\Users\You\Documents\keras models\PNEUMONIA.PY", line 25, in <module>
td = keras.applications.resnet_v2.preprocess_input(trainingdata)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\You\Documents\keras models\.venv\Lib\site-packages\keras\src\applications\resnet_v2.py", line 134, in preprocess_input
return imagenet_utils.preprocess_input(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\You\Documents\keras models\.venv\Lib\site-packages\keras\src\applications\imagenet_utils.py", line 106, in preprocess_input
return _preprocess_tensor_input(x, data_format=data_format, mode=mode)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\You\Documents\keras models\.venv\Lib\site-packages\keras\src\applications\imagenet_utils.py", line 254, in _preprocess_tensor_input
ndim = len(x.shape)
^^^^^^^
AttributeError: '_PrefetchDataset' object has no attribute 'shape'. Did you mean: 'save'?
通过添加 keras.applications.mobilenet_v2.preprocess_input() 作为输入层和预制模型之间的层找到了解决方法,如下所示:
input = keras.layers.Input([224, 224, 3])
pre = keras.applications.mobilenet_v2.preprocess_input(input)
net = keras.applications.MobileNetV2(
input_tensor = pre,
alpha=1.0,
include_top=True,
weights=None,
classes=3,
classifier_activation="softmax",
name=None,
)
model = keras.Model(inputs=input, outputs=net.output)
从技术上讲,这是一个与原始问题不同的函数,但最终它们最终都会调用 keras\src pplications\imagenet_utils.py 并在执行时产生相同的错误,因此这应该适用于最终调用此函数的所有 preprocess_input 函数.