神经网络的学习 《深度学习 基于Python的理论与实现》第四章


layout: post
title: 深度学习入门 基于Python的理论实现
subtitle: 第四章 神经网络的学习
tags: [Machine learning, Reading]


第四章 神经网络的学习

上一章我们讲前向传播,主要说的数据的传递和计算,没有涉及到参数的训练和选择,本章的主题是神经网络的学习。为了使神经网络可以学习,引入了损失函数这个指标,学习的目的是以该损失函数为基准,找出使它的值最小的权重参数。

4.1 从数据中学习

神经网络的特征就是可以从数据中学习。所谓从数据中学习,指的就是可以由税局自动决定权重参数的值。

4.1.1 数据驱动

所谓数据驱动,强调了数据对机器学习的重要性。几乎所有的事情都和数据有关。以下列出三种解决问题的方法。

  • 人面对问题时,研究问题,想出算法,最终解决问题。
  • 从图中提取特征,再学习模式,最终解决问题。
  • 直接学习数据,得到答案。

深度学习有时也被称为端到端机器学习(end-to-end machine learning)。

4.1.2 训练数据和测试数据

在机器学习中一般将数据集分为测试集和训练集。

4.2 损失函数

神经网络用来寻找最优权重参数的指标被称作损失函数。这个损失函数可以使用任意函数,但一半用均方误差和交叉熵误差等。

4.2.1 均方误差

用作损失函数的函数很多,其中最有名的是均方误差。(mean squared error MSE),表达形式如下:

E = 1 2 ∑ k ( y k − t k ) 2 E = \frac{1}{2}\sum_{k}(y_k-t_k)^2 E=21k(yktk)2

这里的 y k y_k yk代表神经网络的输出, t k t_k tk代表监督数据, k k k代表维数。下来我们进行实现:

def mean_squared_error(y,t):
    return (np.sum((y-t)**2))*0.5

观察数学意义可以知道,MSE的大小直接反映了预测结果和真实值之间的差异。

4.2.2 交叉熵误差

E = − ∑ k t k l o g   y k E= -\sum_kt_klog\ y_k E=ktklog yk

公式里的 l o g log log代表以 e e e为底的自然对数( l o g e log_e loge)。 y k y_k yk是神经网络的输出, t k t_k tk是监督值,也就是标准值。 t k t_k tk使用one-hot表示。

def cross_entropy_error(y,t):
    delta = 1e-7
    return - np.sum(t * np.log(y + delta))

因为np.log(0)会计算成负无穷,所以这里delta的作用是为了应对这个情况。

4.2.3 mini-batch学习

上一章我们讲了批处理,对应实际中使用的批处理,损失函数的写法也要做相应改变。之前介绍的损失函数考虑的都是单个数据的损失函数,如果要求所有的训练数据的损失函数的总和,以交叉熵为例,可以写成如下的形式:

E = − 1 N ∑ n ∑ k t n k l o g   y n k E = -\frac{1}{N}\sum_n\sum_kt_{nk}log\ y_{nk} E=N1nktnklog ynk

这里假设有 N N N个数据, t n k t_nk tnk代表第 n n n个数据的第 k k k个元素的值。另外,MNIST有60000个数据,假设以全部数据为对象求损失函数的和,计算过程需要花费较长的时间。实际中的数据集比这个量更大,因此,我们从全部数据中选出一批数据,然后对每个mini-batch进行学习。这种方式叫做mini-batch学习。

之前我们已经有了读取数据集的代码,接下来我们要从中随机选取10个数据。随机选取可以使用np.random.choice()。

import sys,os
import numpy as np

sys.path.append(os.pardir)
from dataset.mnist import load_mnist

(x_train, t_train),(x_test, t_test) = load_mnist(flatten=True, normalize=True)


train_size = x_train.shape[0]
batch_size = 10
batch_mask = np.random.choice(train_size,batch_size)

x_batch = x_train[batch_mask]
t_batch = t_train[batch_mask]
4.2.4 mini-batch 版交叉熵误差的实现
def cross_entropy_error(y,t):
    if y.ndim == 1:
        t = t
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【资源说明】 人工智能课程大作业-python基于深度学习的英文文本分类源码+项目说明+详细注释(含数据集).zip 数据集以及路径介绍: ``` en_text //下载后的数据集放在这里 ├── unsup //未分类的英文本文,将是本次任务的预测数据 ├── test //测试集数据集,其中包含pos和neg两类数据 ├── pos └── neg └── train //训练集数据集,其中包含pos和neg两类数据 ├── pos └── neg ├── train.py //训练脚本 ├── infer.py //预测脚本 ├── model_path //模型保存路径,执行train.py生成 ├── 500 //默认每500步和最后一步保存一次,名称后缀不用管 └── 1000 ├── net.py //网络结构 ├── save_pre.txt //执行infer.py生成的预测结果 ├── word2id_dict //执行train.py生成的单词对照表 ``` 训练环境关键包依赖 * paddlepaddle-gpu == 1.8.4.post97 执行方式(注意,以下脚本有生成文件指令,请附带sudo权限): ``` 1.开始训练 python train.py 说明:此处会调用readdata.py中的函数,生成字典文件‘word2id_dict’ 训练的默认超参数均在train.py中可以查看 模型会保存至model_path路径中 因GPU设备环境限制可以将代码中的use_gpu = True改为False,采用cpu训练 2.评估网络模型 python infer.py 说明:infer.py中的model_path是指定的模型文件路径,例如默认的为:model_path = 'model_path/500' 预测的文件会生成至save_path文件中,生成为txt文件 因GPU设备环境限制可以将代码中的use_gpu = True改为False,采用cpu训练 ``` 训练部分迭代过程展示: ``` step 950, loss 0.002 step 960, loss 0.001 step 970, loss 0.000 the acc in the test set is 0.783 ``` 预测过程展示: ``` 预测结果保存路径: save_pre.txt 过程较慢,耐心等待,有空点赞以及留言等,谢谢各位啦~ 保存进度: 1 % 保存进度: 2 % 保存进度: 3 % 保存进度: 4 % ``` 预测结果部分展示: ``` en_text/unsup/42446_0.txt------->0 en_text/unsup/3356_0.txt------->0 en_text/unsup/5675_0.txt------->0 en_text/unsup/44521_0.txt------->1 en_text/unsup/12931_0.txt------->1 en_text/unsup/719_0.txt------->0 en_text/unsup/37765_0.txt------->0 ``` 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值