我该如何解决这个错误 'tuple' object is not an iterator

how do i solve this Error 'tuple' object is not an iterator

我是 AI 初学者,需要以下代码的帮助。

valcall = val_images,Yval_images
traincall = train_images,Ytrain_images

callbacks = [
     EarlyStopping(monitor='val_loss', patience=15, verbose=1, min_delta=1e-5),
     ReduceLROnPlateau(monitor='val_loss', factor=0.1, patience=5, cooldown=0, verbose=1, min_lr=1e-8),
     ModelCheckpoint(monitor='val_loss', filepath='/content/drive/My Drive/TPU/testchange.hdf5', verbose=1,save_best_only=True, save_weights_only=True, mode='auto')

    ]

    model.fit_generator( traincall, epochs=epochs,steps_per_epoch=steps_per_epoch,verbose=1, callbacks=callbacks, validation_data=valcall)

我在训练模型时遇到此错误我很困惑 tuple 我需要更改对象吗?请帮帮我谢谢。

我收到这个错误:

在Python中可迭代值和迭代器是有区别的。可迭代值(如 tuple)是您可以传递给 iter 并为其获取迭代器的值。

>>> t = (1, 2)
>>> type(t)
<class 'tuple'>
>>> type(iter(t))
<class 'tuple_iterator'>

迭代器是您可以传递给 next 并取回下一个值的东西,由迭代器的内部状态决定。

>>> itr = iter(t)
>>> next(itr)
1
>>> next(itr)
2

如您所见,元组是可迭代的,但不是迭代器。


在我看来,这种区别经常被忽视的原因有两个。

  1. 迭代器的大部分用途是通过从可迭代对象请求迭代器的函数和构造,这意味着您很少需要直接使用迭代器。例如,您可以编写 for i in some_list: ...,但 for 循环会为您获取列表迭代器 iter(some_list)

  2. 一些可迭代对象,如类文件对象,充当它们自己的迭代器。

    >>> f = open(".zshrc")
    >>> f is iter(f)
    True
    

问题出在Fit_generator的第一个参数'traincall',我传递了两个包含多个图像的变量,就像这样。

traincall = train_images,Ytrain_images

但我猜 Fit_generator 不能采用包含图像的多个变量,所以我不得不制作一个单独的函数,可以像这样批量生成图像:

datagen = ImageDataGenerator(shear_range=0.2, zoom_range=0.2, rotation_range=20, horizontal_flip=True)
def image_a_b_gen(images, batch_size):
    while True:
        for batch in datagen.flow(images, batch_size=batch_size):
            yield getImages(batch)