我是一个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)
我在训练模型时遇到了这个错误,我不明白需要更改哪个元组对象?请帮帮我,谢谢。
回答:
在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