卷积神经网络:不能遍历 DirectoryIterator
Convolutional Neural Network: can't loop through DirectoryIterator
我正在使用 Keras 实现 CNN 图像分类器。我有一个包含训练图像的文件夹和另一个包含验证图像的文件夹,但我没有 类.
的定义
import numpy as np
import os
import matplotlib.pyplot as plt
%matplotlib inline
from __future__ import print_function
import keras
from keras.utils import to_categorical
from keras.preprocessing.image import ImageDataGenerator, array_to_img,img_to_array, load_img
from keras.applications import InceptionV3
conv_base = InceptionV3(weights='imagenet',
include_top=False,
input_shape=(224, 224, 3))
train_dir = 'MO444_dogs/train/'
validation_dir = 'MO444_dogs/val/'
nTrain = 600
nVal = 150
datagen = ImageDataGenerator(rescale=1./255)
batch_size = 30
train_features = np.zeros(shape=(nTrain, 7, 7, 512))
train_labels = np.zeros(shape=(nTrain,3))
train_generator = datagen.flow_from_directory(
train_dir,
target_size=(224, 224),
batch_size=batch_size,
class_mode=None,
shuffle=True)
上面的代码片段可以正常工作。当我尝试使用 model.predict() 函数通过网络传递图像时,问题就开始了。好吧,更准确地说,它开始之前一点,在for循环中:
i = 0
for inputs_batch, labels_batch in train_generator:
features_batch = conv_base.predict(inputs_batch)
train_features[i * batch_size : (i + 1) * batch_size] = features_batch
train_labels[i * batch_size : (i + 1) * batch_size] = labels_batch
i += 1
if i * batch_size >= nTrain:
break
最后一个片段输出如下:
基本上 train_generator
变量是一个 DirectoryIterator
对象,产生 numpy 数组的元组。到目前为止,我认为该错误可能与我没有定义 类 这一事实有关,也许吧?我认为可能是因为我发现了类似的工作示例,如 this,但文件夹定义为 类,如 Keras 文档所解释的那样。
到目前为止,我正在寻找执行此循环的替代方法,但也许我需要完全采用另一种方法。
谢谢或任何指示。
好吧,我重新检查了我的数据,发现其中有一个 class 模式。所以有 classes,我用它解决了问题。
我正在使用 Keras 实现 CNN 图像分类器。我有一个包含训练图像的文件夹和另一个包含验证图像的文件夹,但我没有 类.
的定义import numpy as np
import os
import matplotlib.pyplot as plt
%matplotlib inline
from __future__ import print_function
import keras
from keras.utils import to_categorical
from keras.preprocessing.image import ImageDataGenerator, array_to_img,img_to_array, load_img
from keras.applications import InceptionV3
conv_base = InceptionV3(weights='imagenet',
include_top=False,
input_shape=(224, 224, 3))
train_dir = 'MO444_dogs/train/'
validation_dir = 'MO444_dogs/val/'
nTrain = 600
nVal = 150
datagen = ImageDataGenerator(rescale=1./255)
batch_size = 30
train_features = np.zeros(shape=(nTrain, 7, 7, 512))
train_labels = np.zeros(shape=(nTrain,3))
train_generator = datagen.flow_from_directory(
train_dir,
target_size=(224, 224),
batch_size=batch_size,
class_mode=None,
shuffle=True)
上面的代码片段可以正常工作。当我尝试使用 model.predict() 函数通过网络传递图像时,问题就开始了。好吧,更准确地说,它开始之前一点,在for循环中:
i = 0
for inputs_batch, labels_batch in train_generator:
features_batch = conv_base.predict(inputs_batch)
train_features[i * batch_size : (i + 1) * batch_size] = features_batch
train_labels[i * batch_size : (i + 1) * batch_size] = labels_batch
i += 1
if i * batch_size >= nTrain:
break
最后一个片段输出如下:
基本上 train_generator
变量是一个 DirectoryIterator
对象,产生 numpy 数组的元组。到目前为止,我认为该错误可能与我没有定义 类 这一事实有关,也许吧?我认为可能是因为我发现了类似的工作示例,如 this,但文件夹定义为 类,如 Keras 文档所解释的那样。
到目前为止,我正在寻找执行此循环的替代方法,但也许我需要完全采用另一种方法。
谢谢或任何指示。
好吧,我重新检查了我的数据,发现其中有一个 class 模式。所以有 classes,我用它解决了问题。