Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x Keras model.fit_生成器引发迭代错误_Python 3.x_Tensorflow_Keras - Fatal编程技术网

Python 3.x Keras model.fit_生成器引发迭代错误

Python 3.x Keras model.fit_生成器引发迭代错误,python-3.x,tensorflow,keras,Python 3.x,Tensorflow,Keras,我正在尝试从这个github repo中的ssd300_training.ipynb代码运行Win10系统上的SSD端口。 在训练模型和解决方案时,我遇到了一个“StopIteration”错误,通过我的一点研究,我建议在数据生成器函数中添加一个while True块。然而,我对代码的熟练程度还不够,因为它不像函数格式那样编写。 以下是数据生成器代码: # 6: Create the generator handles that will be passed to Keras' `fit_gen

我正在尝试从这个github repo中的ssd300_training.ipynb代码运行Win10系统上的SSD端口。 在训练模型和解决方案时,我遇到了一个“StopIteration”错误,通过我的一点研究,我建议在数据生成器函数中添加一个while True块。然而,我对代码的熟练程度还不够,因为它不像函数格式那样编写。 以下是数据生成器代码:

# 6: Create the generator handles that will be passed to Keras' `fit_generator()` function.
train_generator = train_dataset.generate(batch_size=batch_size,
                                     shuffle=True,
                                     transformations=[ssd_data_augmentation],
                                     label_encoder=ssd_input_encoder,
                                     returns={'processed_images',
                                              'encoded_labels'},
                                     keep_images_without_gt=False)

val_generator = val_dataset.generate(batch_size=batch_size,
                                 shuffle=False,
                                 transformations=[convert_to_3_channels,
                                                  resize],
                                 label_encoder=ssd_input_encoder,
                                 returns={'processed_images',
                                          'encoded_labels'},
                                 keep_images_without_gt=False)  
请问我如何才能添加一个while-True:loop,这样它就可以停止给出StopIteration错误了。以下是培训代码及其给出的错误:

initial_epoch   = 0
final_epoch     = 50
steps_per_epoch = 10



history = model.fit_generator(generator=train_generator,
                          steps_per_epoch=steps_per_epoch,
                          epochs=final_epoch,
                          callbacks=callbacks,
                          validation_data=val_generator,
                          validation_steps=ceil(val_dataset_size/batch_size),
                          initial_epoch=initial_epoch
                         )
错误:

    Epoch 1/50
 9/10 [==========================>...] - ETA: 24s - loss: 3.45 - ETA: 13s - loss: 3.45 - ETA: 9s - loss: 3.4506 - ETA: 6s - loss: 3.450 - ETA: 5s - loss: 3.450 - ETA: 3s - loss: 3.450 - ETA: 2s - loss: 3.450 - ETA: 1s - loss: 3.450 - ETA: 0s - loss: 3.4504
---------------------------------------------------------------------------
StopIteration                             Traceback (most recent call last)
<ipython-input-16-484d98ebb6b5> in <module>()
     11                               #callbacks=callbacks,
     12                               validation_data=val_generator,
---> 13                               validation_steps=ceil(val_dataset_size/batch_size),
     14                               #initial_epoch=initial_epoch
     15                              )

c:\users\keboc\anaconda3\envs\tensorflow_1.8\lib\site-packages\keras\legacy\interfaces.py in wrapper(*args, **kwargs)
     89                 warnings.warn('Update your `' + object_name +
     90                               '` call to the Keras 2 API: ' + signature, stacklevel=2)
---> 91             return func(*args, **kwargs)
     92         wrapper._original_function = func
     93         return wrapper

c:\users\keboc\anaconda3\envs\tensorflow_1.8\lib\site-packages\keras\engine\training.py in fit_generator(self, generator, steps_per_epoch, epochs, verbose, callbacks, validation_data, validation_steps, class_weight, max_queue_size, workers, use_multiprocessing, shuffle, initial_epoch)
   1413             use_multiprocessing=use_multiprocessing,
   1414             shuffle=shuffle,
-> 1415             initial_epoch=initial_epoch)
   1416 
   1417     @interfaces.legacy_generator_methods_support

c:\users\keboc\anaconda3\envs\tensorflow_1.8\lib\site-packages\keras\engine\training_generator.py in fit_generator(model, generator, steps_per_epoch, epochs, verbose, callbacks, validation_data, validation_steps, class_weight, max_queue_size, workers, use_multiprocessing, shuffle, initial_epoch)
    228                             val_enqueuer_gen,
    229                             validation_steps,
--> 230                             workers=0)
    231                     else:
    232                         # No need for try/except because

c:\users\keboc\anaconda3\envs\tensorflow_1.8\lib\site-packages\keras\legacy\interfaces.py in wrapper(*args, **kwargs)
     89                 warnings.warn('Update your `' + object_name +
     90                               '` call to the Keras 2 API: ' + signature, stacklevel=2)
---> 91             return func(*args, **kwargs)
     92         wrapper._original_function = func
     93         return wrapper

c:\users\keboc\anaconda3\envs\tensorflow_1.8\lib\site-packages\keras\engine\training.py in evaluate_generator(self, generator, steps, max_queue_size, workers, use_multiprocessing, verbose)
   1467             workers=workers,
   1468             use_multiprocessing=use_multiprocessing,
-> 1469             verbose=verbose)
   1470 
   1471     @interfaces.legacy_generator_methods_support

c:\users\keboc\anaconda3\envs\tensorflow_1.8\lib\site-packages\keras\engine\training_generator.py in evaluate_generator(model, generator, steps, max_queue_size, workers, use_multiprocessing, verbose)
    325 
    326         while steps_done < steps:
--> 327             generator_output = next(output_generator)
    328             if not hasattr(generator_output, '__len__'):
    329                 raise ValueError('Output of generator should be a tuple '

c:\users\keboc\anaconda3\envs\tensorflow_1.8\lib\site-packages\keras\utils\data_utils.py in get(self)
    783                 all_finished = all([not thread.is_alive() for thread in self._threads])
    784                 if all_finished and self.queue.empty():
--> 785                     raise StopIteration()
    786                 else:
    787                     time.sleep(self.wait_time)

StopIteration: 
1/50纪元
9/10[==============================预计到达时间:24s-损失:3.45-预计到达时间:13s-损失:3.45-预计到达时间:9s-损失:3.4506-预计到达时间:6s-损失:3.450-预计到达时间:5s-损失:3.450-预计到达时间:3s-损失:3.450-预计到达时间:2s-损失:3.450-预计到达时间:1s-损失:3.450-预计到达时间:0s-损失:3.4504
---------------------------------------------------------------------------
StopIteration回溯(最后一次调用)
在()
11#回调=回调,
12验证数据=val发生器,
--->13验证步骤=ceil(val数据集大小/批次大小),
14#初始纪元=初始纪元
15                              )
包装中的c:\users\keboc\anaconda3\envs\tensorflow\u 1.8\lib\site packages\keras\legacy\interfaces.py(*args,**kwargs)
89警告。警告('更新您的`+对象\u名称+
90'`对Keras 2 API的调用:'+签名,stacklevel=2)
--->91返回函数(*args,**kwargs)
92包装器._原始函数=func
93返回包装器
c:\users\keboc\anaconda3\envs\tensorflow\u 1.8\lib\site packages\keras\engine\training.py in fit\u generator(self、generator、每个历元的步骤、历元、冗余、回调、验证数据、验证步骤、类权重、最大队列大小、工作者、使用多处理、无序、初始历元)
1413使用多处理=使用多处理,
1414洗牌=洗牌,
->1415初始_历元=初始_历元)
1416
1417@interfaces.legacy\u生成器\u方法\u支持
c:\users\keboc\anaconda3\envs\tensorflow\u 1.8\lib\site packages\keras\engine\training\u generator.py in fit\u generator(模型、生成器、每个历元的步骤、历元、冗余、回调、验证数据、验证步骤、类权重、最大队列大小、工作者、使用多处理、无序、初始历元)
228 val_enqueuer_gen,
229个验证步骤,
-->230名工人=0)
231其他:
232#不需要尝试/除了因为
包装中的c:\users\keboc\anaconda3\envs\tensorflow\u 1.8\lib\site packages\keras\legacy\interfaces.py(*args,**kwargs)
89警告。警告('更新您的`+对象\u名称+
90'`对Keras 2 API的调用:'+签名,stacklevel=2)
--->91返回函数(*args,**kwargs)
92包装器._原始函数=func
93返回包装器
评估生成器中的c:\users\keboc\anaconda3\envs\tensorflow\u 1.8\lib\site packages\keras\engine\training.py(self、生成器、步骤、最大队列大小、工作者、使用多处理、详细)
1467名工人=工人,
1468使用多处理=使用多处理,
->1469详细=详细)
1470
1471@interfaces.legacy\u生成器\u方法\u支持
c:\users\keboc\anaconda3\envs\tensorflow\u 1.8\lib\site packages\keras\engine\training\u generator.py in evaluate\u generator(模型、生成器、步骤、最大队列大小、工作人员、使用多处理、详细)
325
326当步骤完成时<步骤:
-->327发电机输出=下一个(发电机输出)
328如果不是HASTATR(发电机输出,'''.'透镜''.'':
329 raise VALUERROR('生成器的输出应为元组'
c:\users\keboc\anaconda3\envs\tensorflow\u 1.8\lib\site packages\keras\utils\data\u utils.py in get(self)
783 all_finished=all([not thread.is_alive(),用于self.\u threads中的线程])
784如果所有_都已完成且self.queue.empty():
-->785上升停止迭代()
786其他:
787时间。睡眠(自我等待时间)
停止迭代:

感谢您的帮助

这里有一个类似的问题,如果您每次调用model.fit_generator时都在相同的样本数下引发StopIteration,则他们使用whileTrue:loop来解决该问题,然后再次检查您传递给fit_generator方法的生成器是否产生了与中指定的相同数量的样本“每历元步长”参数。这就是我这方面错误的原因。