Python 无法将自定义数据集加载到cnn预训练以进行特征提取

Python 无法将自定义数据集加载到cnn预训练以进行特征提取,python,cnn,Python,Cnn,您好,我是所有这些的新手,我正在尝试用我的自定义数据集为经过预训练的CNN VGG16提供信息,然后用numpy实现每个图像的特征提取。但是我犯了这个错误:'numpy.ndarray'对象没有属性'load\u img'真的有什么帮助吗 from keras.applications.vgg16 import VGG16 from keras.preprocessing import image from keras.applications.vgg16 import preprocess_i

您好,我是所有这些的新手,我正在尝试用我的自定义数据集为经过预训练的CNN VGG16提供信息,然后用numpy实现每个图像的特征提取。但是我犯了这个错误:'numpy.ndarray'对象没有属性'load\u img'真的有什么帮助吗

from keras.applications.vgg16 import VGG16
from keras.preprocessing import image
from keras.applications.vgg16 import preprocess_input
import numpy as np
import matplotlib.pyplot as plt
import os

model = VGG16(weights='imagenet', include_top=False)
dir_images = "C:/Users/.../Desktop/db"
imgs = os.listdir(dir_images)
for imgnm in imgs:
    image = plt.imread(os.path.join(dir_images, imgnm))
img = image.load_img(image, target_size=(224, 224))
x = image.img_to_array(img)
x = np.expand_dims(x, axis=0)
x = preprocess_input(x)
features = model.predict(x)
#np.save('features.csv', features)

您正在覆盖
keras的模块
image
。使用matplotlib加载的实际图像进行预处理

那就换线吧

image = plt.imread(os.path.join(dir_images, imgnm))
去做其他类似的事情

arr_image = plt.imread(os.path.join(dir_images, imgnm))
然后这个错误就会消失


但是请注意,
image.load\u img
将路径作为输入,而不是类型为
ndarray
的实际图像,因此您应该在循环中使用
load\u img
,并删除matplotlib加载。

您正在通过自己加载的实际图像对
keras的模块
image
进行预处理matplotlib

那就换线吧

image = plt.imread(os.path.join(dir_images, imgnm))
去做其他类似的事情

arr_image = plt.imread(os.path.join(dir_images, imgnm))
然后这个错误就会消失


但是请注意,
image.load\u img
将路径作为输入,而不是类型为
ndarray
的实际图像,因此您应该改为在循环中使用
load\u img
并移除matplotlib加载。

您已经使用plt.imread打开了图像,因此每次都要用新图像覆盖变量图像。稍后您想再次加载图像,但它已作为numpy数组打开,这会导致错误。您需要重写第4-7行以使其正常工作。您已经使用plt.imread打开了映像,因此每次都要使用新映像覆盖变量映像。稍后您想再次加载图像,但它已作为numpy数组打开,这会导致错误。你必须重写第4-7行才能让它工作。