我该如何解决这个错误 '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
如您所见,元组是可迭代的,但不是迭代器。
在我看来,这种区别经常被忽视的原因有两个。
迭代器的大部分用途是通过从可迭代对象请求迭代器的函数和构造,这意味着您很少需要直接使用迭代器。例如,您可以编写 for i in some_list: ...
,但 for
循环会为您获取列表迭代器 iter(some_list)
。
一些可迭代对象,如类文件对象,充当它们自己的迭代器。
>>> 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)
我是 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
如您所见,元组是可迭代的,但不是迭代器。
在我看来,这种区别经常被忽视的原因有两个。
迭代器的大部分用途是通过从可迭代对象请求迭代器的函数和构造,这意味着您很少需要直接使用迭代器。例如,您可以编写
for i in some_list: ...
,但for
循环会为您获取列表迭代器iter(some_list)
。一些可迭代对象,如类文件对象,充当它们自己的迭代器。
>>> 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)