在进行转学习时,我首先通过VGG16网络的底层提供图像。我正在使用生成器功能。
datagen=ImageDataGenerator(1./255)
generator = datagen.flow_from_directory(
train_data_dir,
target_size=(img_width, img_height),
batch_size = 32,
class_mode=None,
shuffle=False
)
model.predict_generator(generator, nb_train_samples
我将类模式设置为none,因为我只想要数据输出。我设置了shuffle = false,因为我想在这里提供预测的特征,并将它们与地面真相类别变量相匹配:
train_data = np.lead(open(file_name, 'rb'))
train_labels = np.array([0] * NUMBER_OF_ITEMS_FOR_ITEM1 +
[1] * NUMBER_OF_ITEMS_FOR_ITEM2 +...
[n-1] * NUMBER_OF_ITEMS_FOR_ITEMN
这里的问题是我不知道文件的读取顺序。我该怎么知道?或者更好的是,我怎样才能避免猜测正确的顺序。我问,因为我几乎可以肯定低预测准确度与标签不匹配有关。
答案 0 :(得分:2)
好问题,在print
类内的keras/preprocessing/image.py
方法中向next
添加DirectoryIterator
语句:以下是迭代列表的相关代码文件名。您当然必须从源代码重建keras
。
for i, j in enumerate(index_array):
fname = self.filenames[j]
print(fname) # add this to see the current file being accessed
img = load_img(os.path.join(self.directory, fname),
grayscale=grayscale,
target_size=self.target_size)
x = img_to_array(img, data_format=self.data_format)
x = self.image_data_generator.random_transform(x)
然而,为了避免所有这些痛苦,keras docs页面上的这个例子表明,为了确保一致性,应遵循这种模式。
通过训练并验证相同模板的生成器到model.fit_generator
函数。
train_datagen = ImageDataGenerator(
rescale=1./255,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True)
test_datagen = ImageDataGenerator(rescale=1./255)
train_generator = train_datagen.flow_from_directory(
'data/train',
target_size=(150, 150),
batch_size=32,
class_mode='binary')
validation_generator = test_datagen.flow_from_directory(
'data/validation',
target_size=(150, 150),
batch_size=32,
class_mode='binary')
model.fit_generator(
train_generator,
samples_per_epoch=2000,
epochs=50,
validation_data=validation_generator,
num_val_samples=800)
答案 1 :(得分:0)
我调查了source code。我应该注意,自从我发布这个问题以来,Keras已更新到2.0版本。所以答案是基于该版本。
ImageDataGenerator继承自DirectoryGenerator。在其中,我找到以下几行:
<!-- : batch portion
@echo off & setlocal
FOR /F "tokens=2 delims==" %%A in ('wmic ComputerSystem Get Model /value') do SET model=%%A
for /F "delims=" %%a in ('cscript /nologo "%~f0?.wsf" "%model%"') do set "VBreply=%%a"
echo End of VB script, reply: "%VBreply%"
goto :EOF
: VBScript -->
<job>
<script language="VBScript">
model = WScript.Arguments(0)
MsgBox model
Wscript.Echo "response"
</script>
</job>
注意第3行,其中&#34;排序(os.listdir(direcectory,subdir))&#34;。生成器按字母顺序遍历所有文件夹。
后来_recursive_list的定义也在子结构上使用相同的逻辑。
所以答案是:文件夹按字母顺序处理,这在某种程度上是有道理的。