神经网络学习技巧

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代替

 

转载于:https://www.cnblogs.com/vshen999/p/10452675.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值