'_PrefetchDataset'对象在调用resnet_v2.preprocess_input()时没有属性'shape'

问题描述 投票:0回答:1

在尝试预处理我的数据集时,我不断遇到此错误:

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'?
python keras pytorch tf.keras
1个回答
0
投票

通过添加 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 函数.

© www.soinside.com 2019 - 2024. All rights reserved.