keras导入数据

当数据很多时,考虑到效率和内存的问题,这时应该使用fit_generator(generator,...)来训练。

generator参数:要么是python的生成器,要么是keras.utils.Sequence的一个实例,其返回一个tuple,一般是一个inputs,targets的二元tuple。

1.使用keras自带函数:flow_from_directory
这里首先要创建一个ImageDataGenerator,这是一个对每个batch做预处理(缩放,归一化等待)的函数。然后调用flow_from_directory。一个显著的缺点是这个函数局限性太严重。其数据必须有且仅有一个中间目录,每个中间目录下必须放置同类图片。这个中间目录名字代表该目录类别。当然类别映射one-hot、shuffle等待这个函数都做好了。
2.使用python的generator

可参看:

https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014317799226173f45ce40636141b6abc8424e12b5fb27000

具体就是构建如下函数:

def generatorfunc(pathList)
    np.random.shuffle(pathList)
    x=shape(batch,...)
    y=shape(batch,...)
    while True:
      for i,path in enumerate(pathList):    
             xone,yone = readpath(path)
             x(i,...)=xone
             y(i,...)=yone
             if i>=batch:
                yeild((input,output))

当然,这样做需要自己管控batch,shuffle等等,还是比较麻烦。

3.使用Sequence(不是指序列模型)

   例子参见:https://stanford.edu/~shervine/blog/keras-how-to-generate-data-on-the-fly.html

   规格参见:https://www.tensorflow.org/api_docs/python/tf/keras/utils/Sequence

    这里有一个问题,对于batch往往不能整除,那么应该如何处理呢?

    每个epoch后shuffle,不能整除部分直接舍弃,相当于每个数据大概率用到了,官方的flow_from_directory就是这么干的。

    def __len__(self):
        return (self.n + self.batch_size - 1) // self.batch_size  # round up


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值