如何解决这个错误:’tuple’对象不是迭代器

我是一个AI初学者,需要在以下代码中得到一些帮助。

valcall = val_images,Yval_imagestraincall = train_images,Ytrain_imagescallbacks = [     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)

我在训练模型时遇到了这个错误,我不明白需要更改哪个元组对象?请帮帮我,谢谢。

我遇到的错误是: enter image description here


回答:

在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

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注