2019-08-05 22:44:19 qq_26572229 阅读数 49
  • 深度学习基础与TensorFlow实践教程

    本课程主要介绍了深度学习的基础原理和TensorFlow系统基本使用方法。TensorFlow是目前机器学习、深度学习领域优秀的计算系统之一,本课程将结合实例介绍使用TensorFlow开发机器学习应用的详细方法和步骤,着重讲解了用于图像识别的卷积神经网络和用于自然语言处理的循环神经网络的理论知识及其TensorFlow实现方法,并结合实际场景和例子描述了深度学习技术的应用范围与效果。 所有案例均来自讲师团队工作中的亲身实践,所选案例均是深度学习的经典应用,非常具有代表性。

    21447 人正在学习 去看看 AI100讲师

决定用两个星期读完这本书,并自己用Pytorch搭建一个模型。

2019.8.5

第一章深度学习介绍

明确学习目标:

  • 深度学习难点不是深度学习本身,难的是你要吃透问题,如何用深度学习的逻辑去思考你自己的问题,有针对性地设计模型
  • 难的是你有分析问题贺结果的能力,遇到负面结果不是抓瞎。

 

2019.8.6

第三章 PyTorch基础知识

在GPU上Tensor 加速计算,常见Tensor类型:

Date CPU tensor GPU tensor
32-bit floating point torch.FloatTensor  torsh.cuda.FloatTensor
64-bit floating point torch.DoubleTensor  torsh.cuda.DoubleTensor
16-bit floating point torch.HalfTensor  torsh.cuda.HalfTensor
8-bit integer(unsigned) torch.ByteTensor  torsh.cuda.ByteTensor
8-bit integer(signed) torch.CharTensor  torsh.cuda.CharTensor
16-bit integer(signed) torch.ShortTensor  torsh.cuda.ShortTensor
32-bit integer(signed) torch.IntTensor  torsh.cuda.IntTensor
64-bit integer(signed) torch.LongTensor  torsh.cuda.LongTensor

构造矩阵:torch.Tensor(4,5)#4*5矩阵

矩阵加法:torch.add(a,b) # 矩阵a+b

Tensor转numpy:b=z.numpy()#z转numpy

numpy转Tensor:#

去除dim维并返回:torch.squeeze(input,dim,out=None)

数学操作:torch.abs/torch.acos/torch.add

数理统计:torch.mean(input)/torch.mean(input,dim,out=None)#输入张量input指定维度dim中每行的平均值

比较操作:torch.eq#比较元素相等/torch.ge/torch.gt

 

2019.8.7.

第四章 简单案例入门

2019-04-22 20:10:24 NGUever15 阅读数 296
  • 深度学习基础与TensorFlow实践教程

    本课程主要介绍了深度学习的基础原理和TensorFlow系统基本使用方法。TensorFlow是目前机器学习、深度学习领域优秀的计算系统之一,本课程将结合实例介绍使用TensorFlow开发机器学习应用的详细方法和步骤,着重讲解了用于图像识别的卷积神经网络和用于自然语言处理的循环神经网络的理论知识及其TensorFlow实现方法,并结合实际场景和例子描述了深度学习技术的应用范围与效果。 所有案例均来自讲师团队工作中的亲身实践,所选案例均是深度学习的经典应用,非常具有代表性。

    21447 人正在学习 去看看 AI100讲师

————————————————————————————
原文发表于夏木青 | JoselynZhao Blog,欢迎访问博文原文
————————————————————————————

深度学习教程与实战案列系列文章


深度学习 | 绪论
深度学习 | 线性代数基础
深度学习 | 机器学习基础
深度学习 | 实践方法论
深度学习 | 应用
深度学习 | 安装conda、opencv、pycharm以及相关问题
深度学习 | 工具及实践(TensorFlow)
深度学习 | TensorFlow 命名机制和变量共享、变量赋值与模型封装
深度学习 | TFSlim介绍
深度学习 | TensorFlow可视化
深度学习 | 训练及优化方法
深度学习 | 模型评估与梯度下降优化
深度学习 | 物体检测
深度学习| 实战1-python基本操作
深度学习 | 实战2-TensorFlow基础
深度学习 | 实战3-设计变量共享网络进行MNIST分类
深度学习 | 实战4-将LENET封装为class,并进行分类
深度学习 | 实战5-用slim 定义Lenet网络,并训练测试
深度学习 | 实战6-利用tensorboard实现卷积可视化
深度学习 | 实战7- 连体网络MINIST优化
深度学习 | 实战8 - 梯度截断
深度学习 | 实战9- 参数正则化


深度学习简介

应用

  • 视频图像
  • 语音 : 语音识别、语音合成、声纹识别
  • 自然语言处理:机器翻译、信息检索、舆情分析
  • 控制决策:游戏

深度学习基本原理

深度学习本质

机器学习:学习如何映射 F(x): 数据 ￿ 结果
数据规律复杂——F(x) 复杂
一把学出 F(x) 有点难,能不能简化?
在这里插入图片描述

深度学习vs传统机器学习

机器学习:手工设计特征和模型,并学习数据分布
深度学习:侧重从大量数据中直接学习高维、复杂的数据特征
在这里插入图片描述
机器学习: 实现人工智能的方法
深度学习: 机器学习的一种特殊形式,是一种表示学习
在这里插入图片描述

深度学习基本原理

来源:人工神经网络
实质:非常“深”的人工神经网络
目的:学习数据-> 特征
特点:多层表达,高层复杂特征是底层简单特征的抽象
在这里插入图片描述

深度学习发展的原因

  • 数据量:互联网提供了大量的数据,与日俱增的数据量推动了深度学习的发展。
  • 计算能力
    1. 摩尔定律
    2. 针对深度学习的GPU
    3. 人工智能芯片(TPU、Tesla)
  • 促进构建更深网络的算法发展:Relu、BP、Dropout

深度学习小结

  • 概念:源于神经网络,现在是一系列能够用来构建可组合可微分的体系结构的技术和方法
  • 相比传统机器学习:适用于从大量数据中学习复杂特征
  • 效果:实实在在的成效,突破弱人工智能,但强人工智能还远未达 到

Python 基础

Python特性

  • 开源的、解释性,面向对象编程语言
  • 优雅的语法,可读性强
  • 丰富的库,可处理各种工作
  • 支持类和多层继承等面向对象编程技术
  • 跨平台,如 Unix,Windows,MacOS 等等

使用python的知名项目

  • Reddit:社交分享网站,最早使用 Lisp 开发,在 2005 年转为 Python
  • Dropbox:文件分享服务
  • 豆瓣网:文青大本营
  • BitTorrent:BT 下载软件客户端
  • Civilization IV :《文明 4》
  • Google Groups、Gmail、Google Maps 等

搭建python编程环境

集成开发环境

  • Visual Studio:VS 下集成 python 开发环境, 目前仅支持 Windows, 调试、编辑和 C++ 在 VS 中类似
  • PyCharm:JetBrains 开发的 Python IDE,支持 MacOS、Windows、 Linux 等系统;
  • PyCharm 功能:调试、语法高亮、Project 管理、代码跳转、自动完 成、单元测试、版本控制…

安装Python

  • Anaconda: 可以便捷获取和管理 Python 库。包含 conda、Python 在内的超过 180 个科学库及其依赖项
  • 适用平台:Windows,macOS,Linux
  • 推荐使用对应 Python 3.6 的版本

只要装好了anaconda ,python就装好了。
验证是否装好了

conda --version

Python数据类型

Python基本数据类型

数字类型和布尔类型

  • 无需声明类型,系统根据变量赋值语句记性判定。

字符串类型

  • 用于深度学习程序中配置数据路径等信息
  • 两种定义方式,双引号和单引号

Python 容器类型

在深度学习的实践中,数据集扮演重要的角色
假设数据集 D 包含 N 个训练样本,每个样本为三维浮点数,并对 应一维整形标签
(1.73, 3.86, 2.50)-> 1 (2.56, 9.75, 3.21)-> 2
… 用基本数据类型难以定义 使用容器类型

列表(List)和元组(Tuple)

将list转为tuple

mytuple  = tuple(myList1)

列表和元组的设计目的

  • 列表:用于存储需要经常修改的内容
  • 元组:用于存储不希望改变的内容

列表和元组的具体区别:

  • 初始化后,列表可以改变而元组不可改变
  • 元组通常由不同的数据组成,列表是相同类型的数据队列
  • 元组表示的是结构,列表表示的是顺序
  • 元组可以作为字典的 key,但是列表不行

元组使用案例: 定义数据集 D 中的单个训练样本:
表示结构
不可改变
例如:(1.73, 3.86, 2.50)、(2.56, 9.75, 3.21) 等

列表使用案例: 定义整个数据集 D:
数据列表:包含所有训练样本元组:[(1.73, 3.86, 2.50), (2.56, 9.75,3.21), …]
标签列表:包含所有标签:[1, 2, …]
表示顺序
可以增减或修改数据

列表和元组的索引访问:
列表和元组的索引都是从0开始。

列表和元组的分片访问:

  • 基本方法:myList[0:3:1] [起点元素索引: 终点元素索引: 跨度]
  • 左闭右开:起点元素包含在结果中,终点元素不包含在结果中
  • 负数索引:从后往前计数,最后一个元素索引为-1

在这里插入图片描述
在这里插入图片描述
列表元素的批量修改:
在这里插入图片描述

字典

  • 存储键(key)值(value)对
  • 字典数据能够使用键名快速取回、添加、删除、编辑值
  • 数据集 D 也可以使用字典表示
    1. 键:训练数据(元组)
    2. 值:标签(整型数)
    在这里插入图片描述
    访问和修改字典:
  • 访问:通过键访问值
  • 修改:键不可直接修改,值可以修改
  • 添加键值对:直接添加
  • 删除键值对:del

通过[]来取键。
遍历字典:
在这里插入图片描述
字典类型下的更多函数:
在这里插入图片描述
pop之后就会从字典中删除。

集合

  • 使用大括号或者 set() 函数创建集合,
  • 注意:创建一个空集合必须用 set() 而不是,因为是用来创建一个 空字典
  • 可以使用列表创建集合
  • 在深度学习中可用来统计数据集类别数量
Labels_set= set(Labels)

集合的运算:
在这里插入图片描述
集合的操作:

  • 添加元素 s.add( x )
  • 移除元素 s.remove( x )
  • 计算集合元素个数 len(s)
  • 清空集合 s.clear()
  • 判断元素是否在集合中存在 x in s
  • 通过将数据集标签列表转为集合,可以获取类别数量等信息

Python 函数

Python使用def关键字创建函数:

def function_name(arg1,arg2...):
		# statement inside function

Python 函数仅支持返回一个值,可以通过返回元组的方式变相实现返回多个值。

在这里插入图片描述

常用Python库的使用

利用常用Python库处理股票指数预测问题

股票指数预测:

  • 通过第前 300 天的股市数据:X, 预测当天的收盘价: Y, 既是X→Y
  • 第前 300 天的股市数据 X = [x1, x2, …, xn]T 是包含多个特征的向 量,特征包括:
  1. 收盘价 x1
  2. 最高价与最低价的变化百分比 x2
  3. 收盘价与开盘价的变化百分比 x3
  4. 成交量 x4

线性回归

线性回归的定义:
在统计学中,线性回归 (Linear regression) 是利用称为线性回归方 程的最小二乘函数对一个或多个自变量和因变量之间关系进行线 性建模的一种回归分析
只有一个自变量的情况称为简单回归,大于一个自变量情况的叫做多元回归

多元线性回归的形式:
在这里插入图片描述
需要解决的问题是多元回归。

Python 库

标准库 :
pprint,sys,os,…
第三方库
Numpy Scipy Matlibplot Scikit-learn Pandas …

第三方库配置

第三方库安装

conda install  <libname>

第三方库更新

conda update <libname>

第三方库的导入

import numpy
import numpy as np
from numpy import array

案例:使用第三方库进行股价预测

流程

在这里插入图片描述
Pandas 库:

  • 提供快捷处理结构化数据的大量数据结构和函数
  • 兼具高性能数据计算功能以及电子表格和关系型数据库的灵活数据处理功能
  • 提供大量适用于金融数据的高性能时间序列分析功能和工具

数据加载 (Pandas处理表格数据)

导入pandas 模块:

import pandas as pd

pandas.read_csv 模块:加载 csv 文件:

df = pd.read_csv(”googlestock.csv”)

df 数据类型:pandas.core.frame.DataFrame

将 df 修改为按时间戳索引,以便后续处理:

df[’Date’] = pd.to_datetime(df[’Date’]) 
df.set_index(”Date”, inplace=True)

将Date项变为索引项,不再是真正的数据
在这里插入图片描述
** 预处理 DataFrame 类型数据:**

df[’HL_PCT’] = (df[’Adj. High’] - df[’Adj.Close’]) / df[’Adj. Close’]
* 100.0 # 最高价与最低价的变化百分比

df[’PCT_change’] = (df[’Adj. Close’] - df[’Adj.Open’]) / df[’Adj.Open’] * 100.0 # 收盘价与开盘价的变化百分比

df = df[[‘Adj. Close’, ‘HL_PCT’, ‘PCT_change’,‘Adj.Volume’]] # 最终进行预测时需要的特征

df[‘label’] = df[‘Adj. Close’].shift(300) # 标签:以收盘价为预测指标,每一项特征对应的标签为 300 个时间片之后的股价

得到的数据结果:
在这里插入图片描述

数据格式转换(Numpy)

NumPy

python 科学计算的基础包

  • Numerical Python
  • 快速高效的多维数组对象 ndarray
  • 用于对数组执行元素级计算及直接对数组执行数学运算的函数
  • 用于读写磁盘上基于数组的数据集工具
  • 线性代数运算、傅里叶变换、随机数生成
  • 将 C、C++、Fortran 代码集成到 Python 工具
  • 算法之间传递数据的容器

ndarray可以作为数据类型转化的桥梁。

NumPy 数组的创建:向 array 中传入一个 list:

  • 一维数组: np.array([1,2,3])
  • 二维数组: np.array([[1,2,3],[4,5,6]])
  • 随机数组: x = np.random.rand(10)

显示数组元素的属性
在这里插入图片描述
改变数组元素类型
在这里插入图片描述
改变数组的尺寸:reshape方法
在这里插入图片描述
将reshape 的某个参数指定位-1时,numpy会根据实际数组元素个数自动替换-1 为具体的大小。
常用于数据量比较大的时候。
在这里插入图片描述
元素所以(基于列表和元组的索引方式):从零开始,左闭右开。
在这里插入图片描述
使用布尔型索引
在这里插入图片描述
使用条件索引
在这里插入图片描述
元素修改
在这里插入图片描述
多维数组的索引和切片
在这里插入图片描述
多维数组的布尔索引和切片
在这里插入图片描述
ufunc操作:可对数组的每个元素进行操作的函数
在这里插入图片描述
四则运算符同样具有ufunc属性
在这里插入图片描述
比较操作
在这里插入图片描述
矩阵乘法
在这里插入图片描述
文件存取(假设有数组array为a,类型为int32)
在这里插入图片描述
将 DataFrame 的数据转换成 Numpy 矩阵,并分为数据和标签,以 便下一步处理
在这里插入图片描述
然后可以利用 Scikit-learn 等第三方库对 X 和 y 做进一步处理

数据预处理(Scikit-learn)

  • python 机器学习库
  • 进行数据挖掘和数据分析的简单而高效的工具
  • 基于 NumPy,SciPy 和 matplotlib 构建
  • 支持数据预处理、降维、回归、聚类、分类等操作

在这里插入图片描述
案例 1:数据预处理
sklearn.preprocessing.scale 模块:数据零均值化和单位方差化在这里插入图片描述
案例 2:数据特征降维
sklearn.decomposition.PCA 模块:PCA 数据降维
在这里插入图片描述
案例 3:数据集处理
sklearn. model_selection.train_test_split 模块:快速划分训练集与测 试集
在这里插入图片描述
案例 4:机器学习模型
sklearn.linear_model. LinearRegression 模块:线性回归
举例:用线性回归做直线拟合 (注意:之前股票回归的线性回归是 做多元数据预测)
在这里插入图片描述

股价预测程序:对调用 Numpy 生成的数据和标签矩阵 X 和 y,使 用 Scikit-learn 进行进一步处理:
在这里插入图片描述

完成数据规范化和训练测试集划分之后,调用线性回归模块进行
回归预测
在这里插入图片描述

clf = sklearn.linear_model.LinearRegression() # 定 义 线 性回归器
clf.fit(X_train, y_train) # 开 始 训 练
accuracy = clf.score(X_test, y_test) # 测 试 并 得 到 测 试 集性能
forecast_set = clf.predict(X_lately) # X_lately: 一 部 分不包括在训练和测试集中的数据,用于生成股价预测结果

结果可视化(Matplotlib)

完成线性回归训练和预测之后,下一步需要输出预测结果

结果可视化工具(matplotlib)

  • matplotlib.image 模块:图像操作
  • matplotlib.pyplpot 模块:显示图像
    在这里插入图片描述

实现数据可视化

在这里插入图片描述

股价预测程序的结果绘制分成两个部分:
(1)已有的收盘价格数 据;
(2)预测的未来收盘价
在这里插入图片描述
绘制出来的效果
在这里插入图片描述

第三方库:Scipy

  • 基于 Numpy 之上,操控 Numpy 数组进行科学计算

  • 专门解决科学计算中各种标准问题域的包的集合

  • 数值积分、矩阵分解、信号处理、稀疏矩阵和线性系统求解器、统 计工具等。

    1. scipy.io:加载和保存 MATLAB 文件
    2. scipy.linalg:包含一系列线性代数操作
    3. Scipy.optimize:优化和拟合

Scipy.io 模块:保存和加载 MATLAB 文件 (mat)
在这里插入图片描述

  1. scipy.linalg 模块:标准的线性代数操作
    scipy.linalg.det() 函数:计算方阵的行列式
    scipy.linalg.inv() 函数:矩阵求逆
  2. scipy.fftpack:快速傅立叶变换

scipy.optimize:优化和拟合
在这里插入图片描述
绘制效果如下:
在这里插入图片描述

2019-01-23 20:30:36 LuffysMan 阅读数 772
  • 深度学习基础与TensorFlow实践教程

    本课程主要介绍了深度学习的基础原理和TensorFlow系统基本使用方法。TensorFlow是目前机器学习、深度学习领域优秀的计算系统之一,本课程将结合实例介绍使用TensorFlow开发机器学习应用的详细方法和步骤,着重讲解了用于图像识别的卷积神经网络和用于自然语言处理的循环神经网络的理论知识及其TensorFlow实现方法,并结合实际场景和例子描述了深度学习技术的应用范围与效果。 所有案例均来自讲师团队工作中的亲身实践,所选案例均是深度学习的经典应用,非常具有代表性。

    21447 人正在学习 去看看 AI100讲师

 luffy搭建深度学习环境可谓一波三折, 最后终于搭建成功了, 原来用cpu跑30分钟的代码, gpu上1分30秒就跑完了(感动哭).
 另外两篇博客可作为参考, 毕竟踩了许多坑:
深度学习之路–环境篇(使用docker搭建tensorflow_gpu开发环境)
深度学习之路–环境篇(TensorFlow_GPU+CUDA)

基本步骤

1 安装NVIDIA驱动

 luffy这里是在服务器上进行搭建环境的, 驱动已经安装好了, 但是安装驱动很关键, 务必要匹配自己的显卡型号和后面准备安装的cuda版本. 网上有很多教程, luffy就不赘述了(主要是自己也不太熟>_<).
在这里插入图片描述

2 安装anaconda3

由于luffy使用使用指令安装几次不成功, 所以采用下载sh文件手动安装的办法;

  1. 去官网下载anaconda3, 或者去清华开源软件镜像下载更快一点.
  2. 转到安装文件所在目录, 使用以下指令进行安装, 一路默认即可, 或者自己指定安装目录.
    $sh Anaconda3-2018.12-Linux-x86_64.sh

3 创建tensorflow-gpu + cuda + cudnn环境

接下来就是体现anaconda3的强大之处了, 一步到位

  1. 首先选定要安装那个版本的cuda, 具体参考Tensorflow不同版本要求与CUDA及CUDNN版本对应关系
  2. 创建conda环境(anaconda可以创建任意环境, 每个环境里面可安装任意版本Python/tensorflow/cuda等, 就像一个个不同的虚拟机一样, 太方便了)
    $conda create -n tensorflow_gpu python=3.6 tensorflow=1.4.1
    以上指令可同时完成安装Python3.6/ tensorflow-gpu1.4.1/cuda8.0/cudnn7.1.3
    在这里插入图片描述
    以上就基本搭建完成了, 但是在实际运行代码时, 可能会遇到下面的小问题.

遇到的问题

  1. luffy安装完成后, 赶紧测试下, 用的是tensorflow官网Mnist手写数字识别问题的多层卷积神经网络模型, 但是在成功下载完数据集后提下下面的错误:
E tensorflow/stream_executor/cuda/cuda_dnn.cc:378] Loaded runtime CuDNN library: 7103 (compatibility version 7100) but source was compiled with 7005 (compatibility version 7000).  If using a binary install, upgrade your CuDNN library to match.  If building from sources, make sure the library loaded at runtime matches a compatible version specified during compile configuration.
2019-01-23 18:14:30.459465: F tensorflow/core/kernels/conv_ops.cc:667] Check failed: stream->parent()->GetConvolveAlgorithms( conv_parameters.ShouldIncludeWinogradNonfusedAlgo<T>(), &algorithms)
Aborted (core dumped)

原因: 大概意思是cudnn运行时环境版本为7103(自动安装的), 但是源的编译版本为7005(我也不明白什么是缘~, 是开发环境?), 二者不兼容.
解决: 把cudnn7103降级为7005

#可先搜索cudnn有哪些可用包
$conda search cudnn
#然后安装目标包
conda install cudnn=7.0.5
  1. 有些同学可能会问, 为什么安装的是tensorflow1.4.1-gpu呢?
    因为anaconda3的包里面只有1.4.1啊因为anaconda3的包里面只有1.4.1啊
    在这里插入图片描述
2019-10-08 18:59:09 weixin_44755244 阅读数 17
  • 深度学习基础与TensorFlow实践教程

    本课程主要介绍了深度学习的基础原理和TensorFlow系统基本使用方法。TensorFlow是目前机器学习、深度学习领域优秀的计算系统之一,本课程将结合实例介绍使用TensorFlow开发机器学习应用的详细方法和步骤,着重讲解了用于图像识别的卷积神经网络和用于自然语言处理的循环神经网络的理论知识及其TensorFlow实现方法,并结合实际场景和例子描述了深度学习技术的应用范围与效果。 所有案例均来自讲师团队工作中的亲身实践,所选案例均是深度学习的经典应用,非常具有代表性。

    21447 人正在学习 去看看 AI100讲师

第一章 如何使用keras开发深度学习模型

使用keras在python中创建和评估深度学习神经网络非常,但您必须遵循严格的模型生命周期。在本章中,你将了解在keras中创建、训练和评估深度学习神经网路的过程,以及如何使用训练好的模型进行预测。您还将了解如何使用函数式API,在设计模式时提供更大的灵活性。阅读本章后,您将了解:

1. 如何在keras中定义、编译、拟合和评估深度学习模型
2. 如何为回归和分类预测建模问题选择默认值
3. 如何使用函数式API开发标准的多层感知器,卷积和递归神经网络。

现在让我们来开始吧

1.1 keras模型生命周期

以下是keras神经网路模型生命周期中的5个步骤的概述:

  1. 定义网路
  2. 编译网络
  3. 适合网络
  4. 评估网络
  5. 作出预测
    在这里插入图片描述
    让我们依次使用易于使用的keras Sequential API来查看每个步骤。

1.1.1 步骤1:定于网路

第一步是定义神经网络。神经网络在keras中被定义为层序列,这些层的容器就是Sequential类。第一步是创建Sequential类的实例。然后创建图层并按照他们的连接顺序添加这些层。

例如,我们可以分两步走:

model = Sequential()
model.add(Dense(2))

我们也可以通过创建一个图层数组并将其传递给Sequential类的构造函数这一步来完成:

layers = [Dense(2)]
model = Sequential(layers)

网络中的第一层必须定义预期的输入数量。指定他的方式可能因网络类型而异。但对于Multilayer Perceptron模型,这由输入dim属性来指定。例如一个小的多层感知器模型,在可见层中有2个输入,隐藏层中有5个神经元,输出层中有1个神经元,可以定义为:

model = Sequential()
model.add(Dense(5,input_dim = 2))
model.add(Dense(1))

将Sequential模型视为通道,将原始数据输入底部,并将预测输出到顶部。这在keras中是一个有用的概念,因为传统上与层相关的问题也可以拆分并做为单独的层 ,清楚的显示他们在输入到预测的结果中数据的转换。例如,可以提取转换来自层中每个神经元的求和信号的激活函数,并将其作为单独的层添加到Sequential中

model = Sequential()
model.add(Dense(5,input_dim = 2))
model.add(Activation('relu))
model.add(Dense(1))
model.add(Activation('sigmoid'))

激活函数的选择对于输入层是最重要的,因为它将定义预测将采用的格式。例如下面一些常见的预测模型问题类型,以及在输出层中使用的结构和标准激活函数。
回归问题:线性激活函数或者与输出数量匹配的神经元数量
二分类:逻辑激活,或sigmoid,以及输出层的一个神经元。
多分类:一个one-hot编码输出模式,softmax激活函数或softmax,每个类值一个输出神经元。

1.1.2 步骤2:编译网络

一旦我们定于了网路,我们就要编译它,编译是一个提高效率的步骤,它将我们定义的简单图层序列转换为高效的矩阵变换系列,其格式应该可以在CPU或者GPU上执行,具体取决keras的配置方式。可以将编译视为网络的预计算步骤。定义模型够必须进行编译。
编译网络需要指定许多参数,用于训练你的网络,具体的有:用于网络的优化算法最下化网络的损失函数。例如,下面是编译定义模型并指定随机梯度下降(sgd)优化算法和均值误差损失函数,用于回归类型问题。

model.compile(optimizer = 'sgd',loss = 'mean_squared_error')

或者在编译之前创建和配置优化算法类型

sgd = SGD(lr = 0.1,momentum = 0.3)
model.compile(optimizer = sgd,loss = 'mse')

对于预测问题来说,类型不一样,使用的损失函数也不一样。下面是常见问题所采用的一些损失函数。
回归:均方误差或者mean_squared_error
二分类:binar_crossentrory
多分类:categorical_crossentropy

最常见的优化算法是随机梯度下降,但keras还支持一套其他更好的优化算法,这些算法在很少或没有配置的情况下都能很好地工作。我们最常用的优化算法有随机梯度下降、Adam和RMSprop
最后除了损失函数之外,还可以在拟合模型的时候收集度量标准,通常 ,要收集的最有用的的附加标准是分类问题的准确性,使用数组的方式指定要收集的度量指标。例如:

model.compile(optimizer = 'sgd',loss = 'mean_squared_error',metrics = ['accurary'])

1.1.3 步骤3:训练网络

一旦网络编译完成,就可以训练了,这就意味着在训练数据集上调整模型权重,训练网络需要指定训练数据,包括输入矩阵X和匹配输出数组Y。使用反向传播算法训练网络,并根据编译模型时指定的优化算法和损失函数进行优化。
反向传播算法要求网络在指定的训练数据集上训练指定数量的epoch,每个epoch可以划分为多个批次 (batches),这定义了在一个epoch内更新权重之前网络所接触的训练数据的模式,这是从效率优化考虑的,确保一次不会将太多输入模式加载到内存中。拟合网络最小的例子如下:

history= model.fit(X,Y,batch_size = 16,epochs = 100)

拟合后,将返回历史对象,该对象提供训练期间的模型性能的摘要,包括损失和编译模型时指定的所有指标,记录每次epoch的指定性能的指标。训练可能需要很长时间,从几秒到几天,具体的时间取决于网络的大小和训练数据的大小。
默认情况下没个epoch都会显示一个进度条,这可能会给你带来噪音,但同时直观的表示出数据的训练情况。如果想关掉这个进度条可以设置verbose=0,代码如下:

history= model.fit(X,Y,batch_size =16,epochs = 100,verbose = 0)

1.1.4 步骤4:评估网络

一旦网路训练完成,就可以对其进行评估。可以在训练数据上进行评估网路,,最好不要这么做,因为我们在训练集上训练模型,如果用同样的数据评估模型,无法体现所训练模型的泛化能力。我们可以在训练之前预留出验证数据和测试数据。用测试数据来评估所训练网络的真实泛化能力。
我们在测试数据上评估所训练模型:

loss,accuracy = model.evaluate(x_test,y_test)

1.1.5 步骤5:做出预测

一旦我们对训练的模型性能感到满意,我们就可以用他来预测新数据,这个很简单,调用模型的predict()函数处理新数据即可,例如:

prediction = model.predict(x)

预测输出的形式由网络输出层的格式决定,在回归问题上,输出形式可以直接的以问题格式一致的方式输出,一般由线性激活函数来完成。对于二分问题,预测其中一个类别出现的概率,然后通过激活层根据指定的舍入方式转换为1或0。
对于多分类,结果可以说概率数组的形式(假设一个one-hot输出变量),可能需要使用numpy的argmax()函数将其转化为单个类别输出的预测。或者对于多分类问题,我们使用predict_classes()函数,它会自动将预测转换为清晰的对应类别的值。

prediction= model.predict_classes(x)

与拟合和评估网络一样,提供详细输出用于了解模型预测的进度,使用verbose参数来关闭这个进度

prediction= model.predict_classes(x,verbose = 0)
2019-12-13 18:07:03 ZXY115019 阅读数 98
  • 深度学习基础与TensorFlow实践教程

    本课程主要介绍了深度学习的基础原理和TensorFlow系统基本使用方法。TensorFlow是目前机器学习、深度学习领域优秀的计算系统之一,本课程将结合实例介绍使用TensorFlow开发机器学习应用的详细方法和步骤,着重讲解了用于图像识别的卷积神经网络和用于自然语言处理的循环神经网络的理论知识及其TensorFlow实现方法,并结合实际场景和例子描述了深度学习技术的应用范围与效果。 所有案例均来自讲师团队工作中的亲身实践,所选案例均是深度学习的经典应用,非常具有代表性。

    21447 人正在学习 去看看 AI100讲师

    在深度学习技术日益成熟的今天,深度学习框架作为起到支撑作用的基础性平台,也逐渐走向成熟。目前我们常用的深度学习框架由tensorflow、Caffe和Pytorch等,这些框架各有优劣,下面是我对常用的7个深度学习框架做的简单梳理。目前百度开发的深度学习开发框架PaddlePaddle经过一段时间的技术积累,也开始逐渐走向成熟,大家可以持续关注。

          除了深度学习框架外,另外一个非常重要的概念是深度学习架构,目前深度学习架构主要有RNN、LSTM、CNN、DBN和DSN五种,其中文名称和主要应用介绍如下:

 

 

深度学习框架汇总

阅读数 1489

没有更多推荐了,返回首页