Keras big data train 大规模数据训练-迭代器

生成迭代器,配合fit_generator进行大规模数据训练,减少因为fit方式直接把所有数据输入内存造成内存溢出问题

要保持和fit一样的训练效果,要重写Keras相应的类,主要分为三种类

  1. sequence 时序 TimeseriesGenerator(tf.keras.preprocessing.sequence.TimeseriesGenerator)
  2. txt 文本  text_to_word_sequence ()
  3. 图像 image ImageDataGenerator (tf.keras.preprocessing.image.ImageDataGenerator)

以时间序列为例

 核心是重写几个方法

def __len__(self):

def __getitem__(self, index):

from keras.utils import data_utils
# data_utils.Sequence
from tensorflow.keras.preprocessing.sequence import TimeseriesGenerator
class CustomGenerator(TimeseriesGenerator):
    """
    class TimeseriesGenerator
    https://github.com/keras-team/keras/blob/v2.9.0/keras/preprocessing/sequence.py#L55-L231
    """
    def __init__(self,   pre_len, kd_flag, **kwargs):
        super(CustomGenerator,self).__init__(**kwargs)
        self.kd_flag = kd_flag
        self.pre_len = pre_len
    def __getitem__(self, index):
        if self.shuffle:
            rows = np.random.randint(
              self.start_index, self.end_index + 1, size=self.batch_size)
#             print(rows)
        
        else:
            i = self.start_index + self.batch_size * index
            rows = np.arange(
              i, min(i + self.batch_size, self.end_index + 1))
#             print(rows)
        np.random.shuffle(self.data)
        samples = self.data[rows]

        if self.kd_flag:
            return samples, [samples[:, -1, -1], samples[:, -pre_len:, 1], np.zeros(inputs_new.shape[0])]
        else:
            return samples, [samples[:, -1, -1], samples[:, -pre_len:, 1]]

完成函数重写之后,便可以使用fit_generator进行训练了

例子

gen_input_kd = CustomGenerator()
example = example_model()
example.compile(
    optimizer=opt,#keras.optimizers.Adam(learning_rate=0.001, amsgrad=True),
    metrics=['mae'],#tf.keras.metrics.get('mae'),
    loss = [loss1,loss2,loss3]
    ,loss_weights=[0.75,0.05,0.2]
)
example.fit_generator(gen_input_kd, epochs=epochs, verbose=2)

原是函数的方法

keras/sequence.py at 07e13740fd181fc3ddec7d9a594d8a08666645f6 · keras-team/keras · GitHub

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用yolov3-keras训练自己的数据集,您需要按照以下步骤进行操作: 1. 数据集准备: 首先,您需要准备您自己的数据集,并将其进行标注。您可以使用VOC2007数据集作为参考。确保您的数据集包含正确的文件夹结构,并且您的标注文件与图像文件匹配。 2. 生成训练集和验证集: 根据您的数据集,创建一个用于训练的文件夹和一个用于验证的文件夹。将您的数据集按比例划分到这两个文件夹中。 3. 修改参数文件: 根据您的数据集和需求,修改yolov3.cfg参数文件。确保您根据您的类别数量,修改参数文件中的类别数相关的选项。同时,您还可以根据需要调整其他参数,如输入图片大小等。 4. 修改类别文件: 创建一个voc_classes.txt文件,并在其中列出您的数据集中的类别名称。确保类别名称的顺序与您的标注文件中的类别顺序一致。 5. 修改训练脚本: 修改train.py文件,以便加载您的数据集和参数文件。确保您修改了相关的路径和文件名,并设置正确的训练参数,如批量大小、学习率等。 6. 开始训练: 运行train.py文件,开始训练您的模型。此时,您需要等待训练过程完成。训练时间可能会根据数据集的大小和计算资源的性能而有所不同。 请注意,您还需要安装相应的环境依赖,如tensorflow-gpu和keras,确保您的环境与yolov3-keras的要求一致。另外,您还可以参考相关的行动计划和具体实现内容,以了解更多关于训练自己数据集的细节。 总结起来,要使用yolov3-keras训练自己的数据集,您需要准备数据集、生成训练集和验证集、修改参数文件、修改类别文件、修改训练脚本并开始训练。记得根据自己的需求进行相应的调整和修改。希望这些信息对您有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值