美文网首页
无标题文章

无标题文章

作者: CC是个特困群众 | 来源:发表于2019-04-08 18:20 被阅读0次

    1.震荡:batchsize设置过小,建议适当增大

    增大batch_size内存利用率以及速度都会提高,但是batchsize过大可能导致内存溢出

      2.val_loss逐渐增大,极大可能为过拟合,可以进行如下操作:

    增大数据集

    很多时候出现过拟合现象是因为数据集过小而引起的,所以当数据量较小时,增大数据集是最简单粗暴的方法,可以尝试keras

    的ImageDataGenerator,在keras中文文档中解释为:用以生成一个batch的图像数据,支持实时数据提升。训练时该函数会无限生成数据,直到达到规定的epoch次数为止。

    train_datagen = ImageDataGenerator(

    rescale=1./255,

    rotation_range=40,

    width_shift_range=0.2,

    height_shift_range=0.2,

    shear_range=0.2,

    zoom_range=0.2,

    horizontal_flip=True,

    fill_mode='nearest')

    或者直接批量生成扩充数据集:

    importscipy

    fromscipyimportmisc

    importos

    importtime

    importglob

    fromscipyimportndimage

    defget_image_paths(folder):

    returnglob.glob(os.path.join(folder,'*.png'))

    defcreate_read_img(filename):

        im = misc.imread(filename)

    img_rote_90 = ndimage.rotate(im,90)

    scipy.misc.imsave(filename[:-4]+'_90.png',img_rote_90)

    img_rote_180 = ndimage.rotate(im,180)

    scipy.misc.imsave(filename[:-4]+'_180.png',img_rote_180)

    img_rote_270 = ndimage.rotate(im,270)

    scipy.misc.imsave(filename[:-4]+'_270.png',img_rote_270)

    img_path ='./data_aug/train/M/'

    imgs = get_image_paths(img_path)

    #print (imgs)

    foriinimgs:

        create_read_img(i)

    dropout适量增大

    drop最简单的理解为:训练过程中向前传播时,将神经网络某一层的输出节点数据以P的概率随机丢弃一部分,可以理解为随机把一张图片50%的点删除。tensorflow通过一个placehold传入keep_prob比率来控制。

    x=tf.placeholder(tf,float32,[None,in_units])

    keep_prob=tf.placeholder(tf.float32)

    在keras中:

    model.add(layers.Dropout(0.5))#根据情况设置dropout

    增加BN层

    (1)可以选用较大学习率,加快收敛速度

    (2)使用BN层可以省略掉dropout以及L2

    (3)去掉LRN

    (4)打乱训练数据

    keras.layers.normalization.BatchNormalization(epsilon=1e-06, mode=0, axis=-1,

    momentum=0.9, weights=None,

    beta_init='zero',

    gamma_init='one')

    在keras中文文档中: 任意,当使用本层为模型首层时,指定input_shape参数时有意义。

    其中mode:为0时是特征规范化,为1时是样本规范化。如果输入是形如(samples,channels,rows,cols)的4D图像张量,则应设置规范化的轴为1,即沿着通道轴规范化。

    增加噪声

    在输入,权值以及网络响应上添加噪声

    增加earlystop

    因为我们在初始化网络的时候一般都是初始为较小的权值。训练时间越长,部分网络权值可能越大。如果我们在合适时间停止训练,就可以将网络的能力限制在一定范围内。训练时间长可能会错过最佳点。

    earlyStopping=kcallbacks.EarlyStopping(monitor='val_loss', patience=10,

    verbose=1,mode='auto')

    history = model.fit(callbacks=earlyStopping)

    增加L2正则化

    model.add(Dense(1, activation='sigmoid',

    kernel_regularizer=regularizers.l2(0.01),

    activity_regularizer=regularizers.l1(0.001)))

    相关文章

      网友评论

          本文标题:无标题文章

          本文链接:https://www.haomeiwen.com/subject/cpkrwftx.html