深度学习入门pdf_最简单入门深度学习

这篇深度学习入门文档介绍了从单个神经元到深度神经网络的基本概念,包括线性单元、激活函数、随机梯度下降、过拟合与欠拟合的处理方法。通过实例和Keras代码,讲解了模型训练和优化,提供了丰富的练习和可视化,适合初学者快速入门。
摘要由CSDN通过智能技术生成

最简单入门深度学习

该篇文档基于kaggle course[1],通过简单的理论介绍程序代码运行图以及动画等来帮助大家入门深度学习,既然是入门,所以没有太多模型推导以及高级技巧相关,都是深度学习中最基础的内容,希望大家看过之后可以自己动手基于Tensorflow或者Keras搭建一个处理回归或者分类问题的简单的神经网络模型,并通过dropout等手段优化模型结果;

每部分都有对应的练习,练习都是很有针对性的,而且都很有趣,尤其是一些练习中都写好了动画的可视化展示,还是很有心的;

目录:

•概述•线性模型:单神经元•非线性模型:深度神经网络•模型训练:随机梯度下降•验证模型:过拟合和欠拟合•提升性能:Dropout和Batch Normalization•分类问题

概述

经过本篇文章,你将搭建自己的深度神经网络,使用Keras和Tensorflow,创建全连接神经网络,在分类回归问题上应用神经网络,通过随机梯度下降训练网络、通过dropout等技术提升模型性能;

近些年在AI方面的主要发展都在深度学习,尤其是应用于自然语言处理图像识别游戏AI等领域,深度学习能得到更接近于人类的结果;

深度学习是一种允许大量深度计算为特征的机器学习方法,深度计算使得深度学习模型可以理解真实世界数据中的复杂高维的信息模式,比如这句话的含义是什么、这张图中的人在干嘛等等;

通过这种优势和灵活性,神经网络成为深度学习的定义模型,神经网络由神经元组成,每个神经元单独看只是一个简单的计算单元,神经网络的能力来自于许多神经元之间的复杂的组合模式;

单个神经元

线性单元

只有一个输入的线性单元对应公式如下:

y = w*x+b

x为输入,神经元连接的权重为ww的更新就是神经网络学习的过程,b为偏差,它与输入没有关系,偏差允许神经元不依赖输入来修改输出,y是神经元的输出,即公式y=w*x+b的结果;

线性单元作为模型的例子

神经元通常作为神经网络的一部分,往往也会将一个单独的神经元模型作为基准模型,单神经元模型是线性模型;

假设我们使用糖分作为输入训练模型,卡路里作为输出,假设偏差b为90,权重w为2.5,当糖分为5时,卡路里2.5*5+90=102.5

多个输入

当我们期望使用多个输入而不是一个时,其实就是将多个输入连接并神经元,计算每个连接权重,并全部加起来得到最终输出,如下:

y = w_0x_0 + w_1x_1 + w_2*x_2 + b

上述公式使用了三个输入,并分别对应各自的连接权重,从输入维度上看,单个输入拟合一条直线两个输入你和一个平面多个输入拟合的则是超平面

Keras中使用线性单元

最简单的创建线性单元模型是通过keras.Sequential,可以通过dense层来创建上述提到的线性单元模型,对于一个有三个输入,一个输出的线性模型,Keras创建方式如下:

from tensorflow import kerasfrom tensorflow.keras import layers# Create a network with 1 linear unitmodel = keras.Sequential([    layers.Dense(units=1, input_shape=[3])])

其中units为1表示该层只有一个输出,input_shape为[3]则表示有3个输入,之所以参数是个列表[],这是因为在图像领域可能需要三维输入,比如[高度,宽度,通道];

线性单元练习

可以通过这个notebook[2]来进行这部分的练习,里面包含了如何通过keras搭建线性单元的神经元模型,并通过其weights属性来查看模型的连接权重偏差,最后还有一个未训练的模型在预测中的表现,可以看到其随机权重在每次运行结果都不一样;

深度神经网络

典型的神经网络通过来组织他们的神经元,当我们把线性单元整理到一起时,我们就得到了一个dense层,神经网络通过叠加dense层来将输入以越来越复杂的方式进行转换,在一个训练好的神经网络模型,每一层都会将输入转换的更接近结果一点;

激活函数

激活函数作用于层的输出,最常用的是整流函数max(0,x),纠正函数将部分处理为0,当我们将整流函数应用于一个线性单元时,也就得到了ReLU,而之前的线性公式:

y=w*x+b

也变成了:

y = max(0, w*x+b)

可以看到,函数也从线性转为了非线性,整流函数图像如下:

2c1bb640045b7690cca1e83b05550f20.png

堆叠dense层

输出层之前通常有一些隐含层,一般我们不能直接看到他们的输出(因为他们的输出并不是最后输出,而是作为下一层的输入,因此无法直接看到),注意当处理回归问题时,最后一层也就是输出层是线性单元,也就是没有应用激活函数,当我们要处理分类或者其他问题时,仍然需要对应的激活函数;

通过keras.Sequential创建多层神经网络方式很简单,只要从第一层到最后一层依次通过layer定义即可,第一层获取输入,最后一层产生输出,代码如下:

from tensorflow.keras import layersmodel = keras.Sequential([    # the hidden ReLU layers    layers.Dense(units=4, activation='relu', input_shape=[2]),    layers.Dense(units=3, activation='relu'),    # the linear output layer     layers.Dense(units=1),])

其中各个layer表示各个堆叠的网络层,activation表示各个层的激活函数,可以看到最后一层是没有的,这是因为它处理的是回归问题,且最后一层输出只有一个,而其他层则不一定;

深度神经网络练习

你可以通过这个notebook[3]来进行这部分练习,其中包含如何通过keras.Sequential搭建

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值