Cyb*_*mer 2 python machine-learning keras
在Keras文档中-steps_per_epoch:在声明一个纪元完成并开始下一个纪元之前,要从生成器产生的总步数(一批样本)。它通常应等于数据集的唯一样本数除以批次大小。
我有3000个样本。如果我将steps_per_epoch = 3000设置为慢,则工作速度会很慢。如果我将steps_per_epoch = 300设置为更快,那么我认为批处理有效!
但是随后我比较了在第一种和第二种情况下分配了多少视频内存。并没有注意到有很大的不同。如果我使用简单的fit()函数,则差异很大。所以这是真正的加速,还是我只处理300个示例,而不是3000个?
该参数需要什么?我如何加快培训速度?我的生成器代码:
def samples_generator(self, path_source, path_mask):
while 1:
file_paths_x = self.get_files(path_source)
file_paths_y = self.get_files(path_mask)
for path_x, path_y in zip(file_paths_x, file_paths_y):
x = self.load_pixels(path_x, 3, cv2.INTER_CUBIC)
y = self.load_pixels(path_y, 0, cv2.INTER_NEAREST)
yield (x, y)
Run Code Online (Sandbox Code Playgroud)
该steps_per_epoch参数是它需要完成一个完整的划时代批量样品的数量。这取决于您的批次大小。在您初始化训练数据的地方设置批次大小。例如,如果您使用ImageDataGenerator.flow()或进行此操作ImageDataGenerator.flow_from_directory(),则批处理大小将通过batch_size每个参数中的参数指定。
您说您有3000个样本。
steps_per_epoch30。steps_per_epoch300。steps_per_epoch则为3000。这是因为steps_per_epoch应等于样品总数除以批次大小。以下两个视频中提供了在Keras中实现此过程的过程。
您必须设置的原因steps_per_epoch是生成器被设计为无限期运行(请参阅docs:
“预计生成器将无限期地循环其数据。”
)。您通过设置实现了这一点while 1。由于fit_generator()应该运行epochs=x,因此该方法必须知道下一个纪元何时在此无限循环内开始(因此,必须从头开始重新提取数据)。
| 归档时间: |
|
| 查看次数: |
3271 次 |
| 最近记录: |