数据分析师养成之路---keras中笔记(上,下采样,数据增强部分)

上采样:
有两类样本(A,B),A>B数量,若n*B=A(约等于),则B样本数据变为:n*B,A样本数据为:A

def upperSample(df)
    df.index=range(len(df))
    df_A=df[df['class']=='A']
    df_B=df[df['class']=='B']
    len_A=len(df_A)
    len_B=len(df_B)
    index_A=df_A.index
    index_B=df_B.index

    if len_A==len_B:
       return shuffleDF(df)#shuffleDF()为自定义的重排函数,使df中的样本分布打乱
    elif len_A>len_B:
         x=len_A//len_B
         df_B=df.iloc[list(index_B)*x]
         df=pd.concat([df_A,df_B],axis=0)
         df.index=range(len(df))
         return shuffleDF(df)
     else:
        ...(即len_B>len_A,方法同上)
def shuffleDF(df):
    shuffle_index=np.random.permutation(len(df))
    df=df.iloc[shffle_index]
    df.index=range(len(df))
    return df

下采样:
有两类样本(A,B),A>B数量, A,B中皆抽取len(B)数量样本用做训练

def lowerSample(df):
    df.index=range(len(df))
    df_A=df[df['class']=='A']
    df_B=df[df['class']=='B']
    len_A=len(df_A)
    len_B=len(df_B)
    if len_A==len_B:
        return shuffleDF(df)
    elif len_A>len_B:
        df_A=df_A.sample(len_B)
        df=pd.concat([df_A,df_B],axis=0)
        df.index=range(len(df))
        return shuffleDF(df)
    else:
      ...(len_A<len_B,同上)

生成器自定义参数:

from keras.preprocessing.image import ImageDataGenerator
from skimage import io,transform,exposure,util

def Augmentdata(img):
    datagen=ImageDataGenerator(...)
    #随机增强图片img
    img=datagen.random_transform(img)
    #给img添加高斯噪声
    img=utils.random_noise(img,mode='gaussian')
    #调整图像对比度
    theta=np.random.uniform(0.1,1)
    img=exposure.adjust_gamma(img,gamma=theta)
    return img

如上,当然以上增强参数,高斯,gamma等,可随机添加

threshold=20
if np.random.randint(0,50,1)<threshold:
   #添加高斯,gamma

对于一批图片,如何添加增强参数呢?
可由以上代码改写:
如train_generator是数据增强后得到的生成器,next(train_generator)得到每批的值,(data_list和label_list),那么每个data就是一个img,我们获得每个img,就可以对其添加增强参数了

猜你喜欢

转载自blog.csdn.net/lulujiang1996/article/details/81112971