Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.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 使用fit_生成器和TFR记录训练Keras模型_Python_Tensorflow_Keras_Conv Neural Network - Fatal编程技术网

Python 使用fit_生成器和TFR记录训练Keras模型

Python 使用fit_生成器和TFR记录训练Keras模型,python,tensorflow,keras,conv-neural-network,Python,Tensorflow,Keras,Conv Neural Network,我想和Keras一起训练我的ConvNet。在一些教程之后,我写了这样的东西 我不知道它是否好,尤其是我对使用发电机来训练我的模型有一些怀疑 之前,我用numpy数组生成器为训练过程提供了数据,但我读到可以使用tfrecords来提高性能 我第一次在下面的create\u dataset函数中将张量转换为numpy数组(在“生成”它们之前),但后来我读到了这一点 实际上,有一种更有效的方法可以使用数据集,而无需 将张量转换为numpy数组 因此,我尝试使用 input\u image=tf.ke

我想和Keras一起训练我的ConvNet。在一些教程之后,我写了这样的东西

我不知道它是否好,尤其是我对使用发电机来训练我的模型有一些怀疑

之前,我用numpy数组生成器为训练过程提供了数据,但我读到可以使用tfrecords来提高性能

我第一次在下面的
create\u dataset
函数中将张量转换为numpy数组(在“生成”它们之前),但后来我读到了这一点

实际上,有一种更有效的方法可以使用数据集,而无需 将张量转换为numpy数组

因此,我尝试使用
input\u image=tf.keras.input(tensor=x)
model.compile(optimizer=optimizer,loss=compute\u loss,target\u tensors=[y])

在此之前,我没有在
model.compile
tensor=x
内部
tf.keras.Input
(我只指定了输入形状)中使用
target\u张量

现在训练进行得很快,但我怀疑有些地方出了差错。你能帮我吗

编辑:如果我直接将数据集放入
fit\u generator
中,我将获得以下信息:

>>> train(model, DataGenerator, filepath_checkpoint="weights-best-tiny-test.hdf5")
Epoch 1/5000
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "tiny.py", line 239, in train
    model.fit_generator(generator=training_generator,validation_data=validation_generator, epochs=5000, max_queue_size=100, steps_per_epoch=TRAINING_STEPS, validation_steps=VALIDATION_STEPS, callbacks=callbacks_list)
  File "C:\Program Files\Python35\lib\site-packages\tensorflow\python\keras\engine\training.py", line 1586, in fit_generator
    steps_name='steps_per_epoch')
  File "C:\Program Files\Python35\lib\site-packages\tensorflow\python\keras\engine\training_generator.py", line 211, in model_iteration
    batch_data = _get_next_batch(output_generator, mode)
  File "C:\Program Files\Python35\lib\site-packages\tensorflow\python\keras\engine\training_generator.py", line 323, in _get_next_batch
    generator_output = next(output_generator)
  File "C:\Program Files\Python35\lib\site-packages\tensorflow\python\keras\utils\data_utils.py", line 767, in get
    six.reraise(*sys.exc_info())
  File "C:\Program Files\Python35\lib\site-packages\six.py", line 693, in reraise
    raise value
  File "C:\Program Files\Python35\lib\site-packages\tensorflow\python\keras\utils\data_utils.py", line 743, in get
    inputs = self.queue.get(block=True).get()
  File "C:\Program Files\Python35\lib\multiprocessing\pool.py", line 644, in get
    raise self._value
  File "C:\Program Files\Python35\lib\multiprocessing\pool.py", line 119, in worker
    result = (True, func(*args, **kwds))
  File "C:\Program Files\Python35\lib\site-packages\tensorflow\python\keras\utils\data_utils.py", line 680, in next_sample
    return six.next(_SHARED_SEQUENCES[uid])
TypeError: 'Iterator' object is not an iterator
列车(型号、数据生成器、文件路径\u检查点=“weights best tiny test.hdf5”) 纪元1/5000 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 列车中第239行的文件“tiny.py” model.fit\u生成器(生成器=培训\u生成器,验证\u数据=验证\u生成器,历元数=5000,最大队列大小=100,每个历元的步骤=培训\u步骤,验证\u步骤=验证\u步骤,回调=回调\u列表) 文件“C:\Program Files\Python35\lib\site packages\tensorflow\python\keras\engine\training.py”,第1586行,在fit\U生成器中 步骤(名称=“每个时代的步骤”) 模型迭代中的文件“C:\Program Files\Python35\lib\site packages\tensorflow\python\keras\engine\training\u generator.py”,第211行 批处理数据=\u获取\u下一批(输出\u生成器,模式) 文件“C:\Program Files\Python35\lib\site packages\tensorflow\python\keras\engine\training\u generator.py”,第323行,在下一批中 发电机输出=下一个(输出发电机) get中的文件“C:\Program Files\Python35\lib\site packages\tensorflow\python\keras\utils\data\u utils.py”,第767行 六、重放(*sys.exc_info()) 文件“C:\Program Files\Python35\lib\site packages\six.py”,第693行,在reraise中 增值 get中的文件“C:\Program Files\Python35\lib\site packages\tensorflow\python\keras\utils\data\u utils.py”,第743行 inputs=self.queue.get(block=True).get() get中第644行的文件“C:\Program Files\Python35\lib\multiprocessing\pool.py” 提升自我价值 worker中第119行的文件“C:\Program Files\Python35\lib\multiprocessing\pool.py” 结果=(True,func(*args,**kwds)) 文件“C:\Program Files\Python35\lib\site packages\tensorflow\python\keras\utils\data\u utils.py”,第680行,在下一个示例中 返回六个。下一个(\u共享\u序列[uid]) TypeError:“迭代器”对象不是迭代器
您能更具体地说明您的问题吗?这个代码有效吗?是的,它有效,但我不知道它是否有效。让我怀疑的是,培训的效果非常快。我想确保我的数据集的所有图像都真正传递给了训练过程。Keras处理迭代,所以你不需要使用数据集迭代器。同时粘贴您的回溯谢谢@Sharky。我没有错误,我只是想知道我的程序是否做了我应该做的事情。不适合?生成器需要迭代器才能工作?不,它不需要迭代器,但别忘了设置批/历元大小。您需要设置每个历元的步长。数据集操作、洗牌、重复等的顺序错误。请阅读更多内容,您能更具体地说明您的问题吗?这个代码有效吗?是的,它有效,但我不知道它是否有效。让我怀疑的是,培训的效果非常快。我想确保我的数据集的所有图像都真正传递给了训练过程。Keras处理迭代,所以你不需要使用数据集迭代器。同时粘贴您的回溯谢谢@Sharky。我没有错误,我只是想知道我的程序是否做了我应该做的事情。不适合?生成器需要迭代器才能工作?不,它不需要迭代器,但别忘了设置批/历元大小。您需要设置每个历元的步长。您的数据集操作顺序错误,如无序、重复等。请阅读更多
>>> train(model, DataGenerator, filepath_checkpoint="weights-best-tiny-test.hdf5")
Epoch 1/5000
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "tiny.py", line 239, in train
    model.fit_generator(generator=training_generator,validation_data=validation_generator, epochs=5000, max_queue_size=100, steps_per_epoch=TRAINING_STEPS, validation_steps=VALIDATION_STEPS, callbacks=callbacks_list)
  File "C:\Program Files\Python35\lib\site-packages\tensorflow\python\keras\engine\training.py", line 1586, in fit_generator
    steps_name='steps_per_epoch')
  File "C:\Program Files\Python35\lib\site-packages\tensorflow\python\keras\engine\training_generator.py", line 211, in model_iteration
    batch_data = _get_next_batch(output_generator, mode)
  File "C:\Program Files\Python35\lib\site-packages\tensorflow\python\keras\engine\training_generator.py", line 323, in _get_next_batch
    generator_output = next(output_generator)
  File "C:\Program Files\Python35\lib\site-packages\tensorflow\python\keras\utils\data_utils.py", line 767, in get
    six.reraise(*sys.exc_info())
  File "C:\Program Files\Python35\lib\site-packages\six.py", line 693, in reraise
    raise value
  File "C:\Program Files\Python35\lib\site-packages\tensorflow\python\keras\utils\data_utils.py", line 743, in get
    inputs = self.queue.get(block=True).get()
  File "C:\Program Files\Python35\lib\multiprocessing\pool.py", line 644, in get
    raise self._value
  File "C:\Program Files\Python35\lib\multiprocessing\pool.py", line 119, in worker
    result = (True, func(*args, **kwds))
  File "C:\Program Files\Python35\lib\site-packages\tensorflow\python\keras\utils\data_utils.py", line 680, in next_sample
    return six.next(_SHARED_SEQUENCES[uid])
TypeError: 'Iterator' object is not an iterator