python - Keras:使用 flow_from _directory() 函数为两个输入模型

我试图用 fit_generator() 训练我的孪生网络,我从这个答案中学到:Keras: How to use fit_generator with multiple inputs最好的方法是创建自己的生成器来生成多个数据点,我的问题是我使用 flow_from_directory() 函数检索数据,但我不知道这是否可行.

这是我为我的问题重新调整生成器的尝试:

from keras.models import load_model
from keras import optimizers
from keras.preprocessing.image import ImageDataGenerator
import numpy as np

model = load_model("siamese_model.h5")

train_datagen = ImageDataGenerator(rescale = 1./255)

def generator():
    t1 = train_datagen.flow_from_directory(base_dir,target_size = (150, 150), batch_size = 20, class_mode = 'categorical',shuffle = True)
    t2 = train_datagen.flow_from_directory(base_dir,target_size = (150, 150), batch_size = 20, class_mode = 'categorical', shuffle = True)
    while True:
        d1,y = t1.next()
        d2 = t2.next()
        yield ([d1[0], d2[0]],y)

model.compile(loss = 'categorical_crossentropy',optimizer= optimizers.RMSprop(lr=2e-5),metrics=['acc'])

history = model.fit_generator(generator(),
                              steps_per_epoch = 10,
                              epochs = 5)

我的代码给出了与我尝试在没有自定义生成器的情况下拟合我的模型时完全相同的错误:

ValueError: Error when checking model input: the list of Numpy arrays that you are passing to your model is not the size the model expected. Expected to see 2 array(s), but instead got the following list of 1 arrays: [array([[[[0.14509805, 0.15686275, 0.16862746],
         [0.14509805, 0.15686275, 0.16862746],
         [0.14509805, 0.15686275, 0.16862746],
         ...,
         [0.14117648, 0.15294118, 0.16862746...

我做错了什么?

最佳答案

试试这个:

while True:
    d1 = t1.next()
    d2 = t2.next()
    yield ([d1[0], d2[0]], d1[1])

此外,您的输入将以不同的方式随机播放,因此如果您将它们按特定顺序放入文件夹中,它们将失去链接。

我建议:

t1 = train_datagen.flow_from_directory(base_dir,target_size = (150, 150), batch_size = 20, class_mode = 'categorical', shuffle = False, seed='13')

t2 = train_datagen.flow_from_directory(base_dir,target_size = (150, 150), batch_size = 20, class_mode = 'categorical', shuffle = False, seed='13')

或使用相同的种子进行洗牌

t1 = train_datagen.flow_from_directory(base_dir,target_size = (150, 150), batch_size = 20, class_mode = 'categorical', shuffle = True, seed='13')

t2 = train_datagen.flow_from_directory(base_dir,target_size = (150, 150), batch_size = 20, class_mode = 'categorical', shuffle = True, seed='13')

关于python - Keras:使用 flow_from _directory() 函数为两个输入模型创建自定义生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57930476/

相关文章:

html - 使用具有 Angular Material 和 Flex Layout 的语义 HTM

reactjs - React-Select 从 1.x 升级到 3.0.4 - 未显示选定值

sass - 找不到要导入的样式表

python - 使用 image_slicer.py 将切片加入完整图像

node.js - 如何在 Node SOAP 中发送原始 XML 请求

python - 如何让这段代码在时间上更加优化?

reactjs - props 没有传递给 react native 中的另一个组件

java - 从 jlink 图像创建所有包含 windows 可执行文件

npm - 无法在 Nexus Repository Manager 2.10 上发布库

javascript - 如何转到 Epubjs 中的特定页面