zoukankan      html  css  js  c++  java
  • 神经网络学习技巧

    1.工作流程

    • 定义问题
      • 假设根据已知数据可以预测结果
      • 面对的问题是什么类型问题,二分类、多分类、回归……
    • 选择衡量模型好坏的指标,指标用来指示损失函数,常用的是准确率、召回率
    • 数据分割,留出部分数据评估模型好坏(测试集),留出部分数据调节超参数(验证集),留出部分数据训练模型(训练集),验证集和训练集的分割可以使用留出验证集、K折交叉验证、重复k折交叉验证
    • 选择激活函数、损失函数、优化方法
    • 找最好的模型,先找过拟合模型,在通过正则化、调节超参数减少过拟合
      • 过拟合方法:添加更多层、添加更多神经元、添加更多轮次
      • 减少过拟合:获取更多数据、添加dropout、减少网络的层、添加L1、L2正则化

    2.数据分割方法

    • 留出验证法
    validation_examples = 1000
    train_examples = 3000
    #用sklearn生成4000个月亮形数据,X.shape=(4000,2),Y.shape=(4000,)
    X,Y = datasets.make_moons(train_examples+validation_examples)
    #前3000个样本作为训练集
    train_x = X[:train_examples]
    train_y = Y[:train_examples]
    #后1000个样本作为验证集
    validation_x = X[train_examples:]
    validation_y = Y[train_examples:]
    • k折交叉验证

    k折交叉验证在划分训练集和验证集时,采用了把样本集划分为k个部分,每次使用k-1个部分做训练集,1个留做验证集

    import numpy as np
    from sklearn import datasets
    from keras import models
    from keras import layers
    import matplotlib.pyplot as plt
    k=5
    #用sklearn生成4000个月亮形数据,X.shape=(4000,2),Y.shape=(4000,)
    X,Y = datasets.make_moons(4000)
    #//得到的是int形数据
    one_size = 4000//k
    validation_score = []
    for i in range(k):
        #concatenate()用来拼接2个数组
        train_x = np.concatenate((X[:one_size*i],X[one_size*(i+1):]),axis=0)
        train_y = np.concatenate((Y[:one_size*i],Y[one_size*(i+1):]),axis=0)
        validation_x = X[one_size * i:one_size * (i + 1)]
        validation_y = Y[one_size * i:one_size * (i + 1)]
        network = models.Sequential()
        network.add(layers.Dense(5,activation="relu",input_shape=(2,)))
        network.add(layers.Dense(1,activation="sigmoid"))
        network.compile(optimizer='rmsprop',loss='binary_crossentropy',metrics=['accuracy'])
        history = network.fit(train_x,train_y,batch_size=64,epochs=5
                              ,validation_data=(validation_x,validation_y))
        validation_score.append(history.history['val_acc'])
    validation_score = np.array(validation_score)
    avg_score = np.average(validation_score,axis=0)
    print(avg_score)
    • 重复k折验证

    在数据量较小时,可以通过进行P次k折验证,每次k折验证前重新打乱数据,一共训练P*k个模型

     3.数据预处理

    • 神经网络的输入得是浮点数张量
    • 对输入数据标准化
    • 缺失值可以使用0代替
  • 相关阅读:
    Digital Video Stabilization and Rolling Shutter Correction using Gyroscope 论文笔记
    Distortion-Free Wide-Angle Portraits on Camera Phones 论文笔记
    Panorama Stitching on Mobile
    Natural Image Stitching with the Global Similarity Prior 论文笔记 (三)
    Natural Image Stitching with the Global Similarity Prior 论文笔记(二)
    Natural Image Stitching with the Global Similarity Prior 论文笔记(一)
    ADCensus Stereo Matching 笔记
    Efficient Large-Scale Stereo Matching论文解析
    Setting up caffe on Ubuntu
    Kubernetes配置Secret访问Harbor私有镜像仓库
  • 原文地址:https://www.cnblogs.com/vshen999/p/10452675.html
Copyright © 2011-2022 走看看