zoukankan      html  css  js  c++  java
  • CNN学习中一些有用的函数记录

    文件处理函数

    1.os.listdir()函数

    ​ 该函数可以用于获取所有二级目录,并返回一个列表

    例如: image-20210801113301416

    配合for函数还能直接获取二级目录的路径

    image-20210801113409898

    应用场景:

    修改子文件夹下的文件名(批量重命名)

    import os
    # 数据集的地址  改为你自己的
    path = './images'
    #获取所有二级目录,存入列表中
    cList=os.listdir(path)
    # 遍历所有二级目录,修改其图片名称
    for catalog in cList:
        #输出当前文件夹名
        print(">>>>>>>>>>>>>>>>>>>>>>>>>"+catalog)
        #拼凑获得子文件夹路径
        s_path = path+'/'+catalog
        #获取子文件夹下的文件名  返回的是一个列表
        imgs = os.listdir(s_path)
        print(imgs)
        #计数器
        n = 0
        for i in imgs:
            #设置旧文件名(就是路径+文件名)
            oldname = s_path + '/' + imgs[n]
            #设置新文件名---拼凑
            newname= s_path + '/' +catalog+str(n+1)+'.jpg'
            os.rename(oldname,newname)   #用os模块中的rename方法对文件改名
            n+=1
    #         print(newname)
    

    2.glob.glob()函数

    该函数属于一个文件搜索函数。利用glob.glob函数可以搜索每个层级文件下面符合特定格式(例如“/*.jpg”)进行遍历

    返回值为list

    应用:可以对文件进行模糊遍历操作

    import glob
    import cv2
    # 测试图像的地址 (改为自己的)
    path_test = './test/'
    test_list=[]
    # 创建保存图像的空列表
    imgs=[]                                                  # glob.glob(path_test+'/*.jpg')                                            
    for im in glob.glob(path_test+'/*.jpg'):                # 利用glob.glob函数搜索每个层级文件下面符合特定格式“/*.jpg”进行遍历
        print(im)
        img=cv2.imread(im) 
        img=cv2.resize(img,(w,h))                           
        imgs.append(img)                                     # 将每张经过处理的图像数据保存在之前创建的imgs空列表当中
    imgs = np.asarray(imgs,np.float32)
    
    print("shape of data:",imgs.shape) 
    
    image-20210801115019952

    由上图可以看出,该函数是按照字典顺序进行遍历的,而不是按自然数大小顺序遍历的,所以在使用过程中需要注意。

    数据增强函数

    由于在进行模型训练的时候,会存在数据集达不到一定的数量集,就会对CNN模型训练的准确率产生影响,所以就需要进行数据增强。

    下面是我参考过的一个好用并且易上手的数据增强的函数

    ImageDataGenerator是keras提供的一种方法。

    详细参数介绍可以看 https://keras.io/preprocessing/image/

    import os
    from keras.preprocessing.image import ImageDataGenerator, array_to_img, img_to_array, load_img
    
    Datagen = ImageDataGenerator(rotation_range=40,
                     shear_range=0.2,
                     zoom_range=0.2,
                     horizontal_flip=True,
                     vertical_flip = True,
                     fill_mode='nearest')
    #还有其他一些参数,具体请看:https://keras.io/preprocessing/image/ ,如去均值,标准化,ZCA白化,旋转,
    #偏移,翻转,缩放等
    def max_img(path,name):
        img = load_img(path+name)#获取一个PIL图像
        x_img = img_to_array(img)
        x_img = x_img.reshape((1,)+ x_img.shape)
    
        i = 0
        for img_batch in Datagen.flow(x_img,
                          batch_size=1,
                          save_to_dir='./images/纹枯病生成/',#'./images/pre_Data/'
                          save_prefix=name,
                          save_format='jpg'):
            i +=1
            if i > 20:
                break
                
    path = './images/纹枯病/'
    list_name = [x for x in os.listdir(path)]
    list_img = [path+x for x in os.listdir(path)]
    #扫描文件夹的内容
    # [x for x in os.listdir(path)]
    # list_img[0]
    # max_img()
    # list_name[0]
    for i in list_name:
        print(i)
        max_img(path,i)
    
    image-20210801120641144

    经验总结

    当有不懂的时候,还是得学着去看下TensorFlow的官方示例和官方文档。相比网上的博客,官方的示例讲解的更为详细。

    或者去https://www.kaggle.com/下载相关的模型进行学习,都是很好的办法。

    后续

    以后在学习过程中,碰见有用的函数,都会记录在此。

  • 相关阅读:
    2020/12/27
    2020/12/25 the light
    2020/12/25
    2020/12/23
    2020/12/22
    美加大量银行用户遭攻击,这些黑客到底牛到什么程度?
    揭秘马云的蚂蚁科技“整改”计划
    大众集团成功研发:可移动的电动汽车充电器,网友:太方便了
    东方联盟郭盛华的江湖往事
    5种方法!疫情期间防御恶意软件,网络钓鱼和诈骗
  • 原文地址:https://www.cnblogs.com/printwangzhe/p/15086424.html
Copyright © 2011-2022 走看看