Tensorflow深度学习笔记

一、概括

1、深度学习的定义

深度学习(Deep Learning)是一个复杂的机器学习算法,它的概念源于人工神经网络的研究,强调从连续的层(layer)中学习,其中的“深度”在某种意义上是指神经网络的层数,而“学习”是指训练这个神经网络的过程。

2、深度学习崛起的原因

1、计算机能力的发展。深度学习的起源并不晚。但是发展初期遭遇瓶颈的最主要原因是:当时的计算资源无法支持我们实现深度学习如此庞大复杂的计算,直到我们开始使用GPU进行计算后,深度学习才终于摆脱原本计算能力的束缚,展现其强大的实力。

3、深度学习和机器学习的区别

深度学习和机器学习最大区别在于二者提取特征的方式不同:深度学习具备自动提取抽象特征的能力,机器学习大多是人们手动选取特征和构造特征。
传统的机器学习在进行图像分类时,需要根据图像的颜色、轮廓、范围等特征,提取相应的特征值,然后进行机器学习训练得到结果。
深度学习则是通过对大量训练数据(这里指的是图像。大量图片)的学习,自动确定需要提取的特征信息,甚至还能获取一些人类想不到的特征组合来训练模型,将这些提取到的特征在经过类似机器学习算法中的模型更新等步骤,得出预测结果。
深度学习和机器学习的区别

深度学习与机器学习的主要区别是在于性能。当数据量很少的时候,深度学习的性能并不好,因为深度学习算法需要大量数据才能很好理解其中蕴含的模式。
深度学习算法严重依赖高端机,而传统的机器学习算法在低端机上就能运行。深度学习需要GPUs进行大量的矩阵乘法运算。
由于深度学习中含有非常多的参数,较机器学习而言会耗费更多的时间。机器学习在训练数据的时候费时较少,同时只需几秒到几小时。

数据处理通常分为非结构化处理、结构化处理。
非结构化处理:图片,视频,声音。
结构化处理:excel表格

二、完整的一个模型

安装tensorflow请参考:Win10下用Anaconda安装TensorFlow-gpu版本

import tensorflow as tf      # 将 TensorFlow 引导

       
(x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data()   # # 加载MNIST数据集
x_train, x_test = x_train / 255.0, x_test / 255.0        # 归一化处理


# 通过堆叠层来构造tf.keras.Sequential模型
model = tf.keras.models.Sequential([
  tf.keras.layers.Flatten(input_shape=(28, 28)),
  tf.keras.layers.Dense(128, activation='relu'),
  tf.keras.layers.Dropout(0.2),
  tf.keras.layers.Dense(10)
])


#  compile 是配置和编译模型


model.compile(optimizer='adam',  # optimizer 优化器设置为 adam,
              loss=loss_fn, # 将 loss 损失函数设置为您之前定义的 loss_fn 函数,
              metrics=['accuracy'])   # metrics度量标准  设置为 accuracy 准确性


# 训练模型
model.fit(x_train, y_train, epochs=5)   # epochs 是训练遍数

# 检查模型性能
model.evaluate(x_test,  y_test, verbose=2)

三、神经网络基础

1、神经网络模型

M-P模型参考网站
1.1M-P模型,其实是按照生物神经元的结构和工作原理构造出来的一个抽象和简化了的模型
	  下图就是生物神经元结构

生物神经元结构
大家可以查一查一些生物方面的书籍,了解一下这个神经元是如何工作的。我们可以概括出生物神经网络的假定特点:

  1. 每个神经元都是一个 多输入单输出的信息处理单元;
  2. 神经元输入 分兴奋性输入和 抑制性输入两种类型;
  3. 神经元具有 空间整合特性和 阈值特性;
  4. 神经元输入与输出间有固定的 时滞,主要取决于突触延搁

请添加图片描述
该模型是模拟从多输入到单输出的信息处理单元。
对于神经元 j ,它可以同时接受了许多个输入信号,用Xi表示,而这些输入信号对神经元的影响是不同的,用权重Wij表示,阈值(Threshold)为θ,Yi为神经元 j 的输出。函数 f()表示激活函数(Activation Function)。当输入信号被送往神经元时,会被分别乘以固定的权重(例如:W1jX1,W2jX2),神经元会计算传送过来的信号总和,只有当这个总和超过了阈值θ时,神经元才会被激活,否则不会被激活。
M-P模型的工作原理可以解释为以下三个步骤
1、神经元接受n个传输信号。
2、将输入与权值参数进行加权并经过激活函数激活。
3、将 激活结果作为结果输出。
这是最简单 的神经网络模型。

1.2感知机模型

感知机模型是建立一个线性超平面来解决线性可分问题。
在这里插入图片描述

一个只有两个输入神经元和一个输出神经元的单层感知机结构。

感知机模型运行的原理:假设X1、X2是输入信号,W1和W2是权重,控制输入信号的重要性,y是输出信号,在感知机中,只有两种输出,其中0代表不传递信号,1代表传递信号。当输入信号被送往神经元时,分别乘以各自权重,然后加总,如果总和超过阈值θ,则输出为1,否则为0.
y = { 0 W 1 X 1 + W 2 X 2 ≤ θ 1 W 1 X 1 + W 2 X 2 > θ y=\begin{cases}0 & W_1X_1+W_2X_2 \leq\theta\\1 & W_1X_1+W_2X_2 > \theta \end{cases} y={01W1X1+W2X2θW1X1+W2X2>θ

LaTeX公式:y=\begin{cases}0 & W_1X_1+W_2X_2 \leq\theta\\1 & W_1X_1+W_2X_2 >  \theta \end{cases}
     如果将θ定义为-b,那么公式可以改写为

y = { 0 W 1 X 1 + W 2 X 2 ≤ 0 1 W 1 X 1 + W 2 X 2 > 0 y=\begin{cases}0 & W_1X_1+W_2X_2 \leq0\\1 & W_1X_1+W_2X_2 > 0 \end{cases} y={01W1X1+W2X20W1X1+W2X2>0

LaTeX公式:y=\begin{cases}0 & W_1X_1+W_2X_2 \leq0\\1 & W_1X_1+W_2X_2 >  0 \end{cases}

通常把b称为偏置(Bias),作用是调节神经元被激活的容易程度。

1.3感知机模型的局限性

这种感知机模型只有输入层和输出层的感知机模型进队线性问题具有分类能力,(它只能表示由一条直线分割的空间,而对由曲线分割而成的非线性空间却无能为力)

1.4 多层感知机(★★★★★)

多层感知机(Multilayer Perceptron,MLP)就是在输入层和输出层之间加入了若干隐藏层,以形成能够将样本正确分类的凸域,使得神经网络对非线性情况的拟合程度大大增强。具有一个单隐层的多层感知机模型的拓扑结构。最左边的通常叫输入层,最右边的叫输出层。在统计神经网络的层数时,输入层一般是不计入层数的,通常把输入层去掉之后的神经网络从左到右依次计数得到总层数,成为神经网络层数。

全连接神经网络
这种的多层感知机也被称为全连接神经网络 ,全连接是指神经网络模型中,相邻两个单元之间的连接使用全连接方式,即==网络当前层的单元与网络上一层的每个单元都存在连接。
随着隐藏层的增加,面临着隐藏层的权值无法训练的问题。

1.5、神经网络的训练

神经网络的训练是指从训练数据中自动获取最优权重参数的过程
通常分为两个阶段

	1、先通过前向传播算法计算得到的预测值,并计算预测值与真实值之间的差距(该差距也成为损失函数)。
	2、通过反向传播算法计算损失函数对每一个参数的梯度,使用合适的梯度下降算法对参数进行更新。
1.5.2、神经网络的训练流程

神经网络训练流程

神经网络的训练的整个流程是迭代的。每一轮训练都相当于进行一次上图的迭代。

1、参数初始化。对模型当中的权重参数进行初始化方法有常数初始化、正态分布初始化、均匀分布初始化等。
2、切分Batch数据。神经网络每一轮训练不是用全部数据,而是选取一定量的数据样本作为输入,这部分数据样本成为一个Batch。
3、前向传播。将步骤(2)切分的Batch数据通过前向传播计算得到的预测结果。
4、建立损失函数。比较计算出的预测结果和真实结果之间的差距,并建立合适的损失函数。
5、反向传播。基于步骤(4)建立的损失函数,通过反向传播算法更新参数,使在每个batch上的预测结果和真实结果之间的差距变小。
6、是否到达迭代次数。如果达到,则结束本来训练,如果未到达,则继续重复前面的步骤进行新一轮的迭代。

使用训练数据集的全部数据进行一次完整的训练,称为一个Epoch。
【譬如】对于一个5000个训练样本的数据,将5000个样本分成大小为500的Batch,那么在对参数进行初始化之后,训练完,整个样本需要10次迭代,1个Epoch。在实际中,往往通过增加Epoch的数量来获得更高的预测精度。

1.6、前向传播算法

前向传播(Forward Propagation)算法是指神经网络向前计算的过程。前向传播算法需要神经网络输入、神经网络的连接

四、构建模型

1、tf.Sequential()

tf.Sequential() 方法可以构建一个tf.Sequential()顺序模型。该模型某一层的输出层即为下一层的输入,模型拓扑结构是个模型层的简单堆叠,没有分支也没有跳转。

- layers:表示堆叠的模型层
- name:表示模型的名称

堆叠两个Dense模型层的结构
模型结构

2、tf.model()

tf.model()方法同样可以创建模型并指定模型的输入和输出

- inputs:表示模型的输入
- outputs:表示模型的输出
- name:表示模型的名称

3、

Dense层

Dense层可以帮助神经网络更好地理解输入数据,从而提高模型的准确性。在深度学习中,Dense层的作用可以分为这几个方面:

              1、特征提取;
              2、数据扁平化;
              3、数据降维或提升维度;
              4、优化模型的训练。

神经网络是一种基于生物神经系统功能和结构特点设计的人工神经网络,是一种通过对样本数据进行学习来实现对未知数据进行预测的算法。神经网络由多个神经元组成,每个神经元都可以接收一个或多个输入,并产生一个输出。神经元之间的连接可以被赋予不同的权重,从而实现对输入数据的非线性映射。通过一定的训练过程,神经网络可以自动学习输入数据中的规律,从而实现数据分类、识别、预测等任务。
Dense层是深度神经网络中常用的一种层。Dense层也被称为全连接层。在神经网络中,Dense层连接了前一层的所有神经元和当前层的所有神经元。

https://aistudio.baidu.com/aistudio/projectdetail/5697669

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

crownyouyou

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值