本节提示:
1、DL的核心构建
2、Keras的简单介绍
3、搭建DL机器训练环境
4、使用DL模型解决基础问题

3.1 DL的基本构建:layer
layer的定义:以1个或多个tensor作为输入,并且运算出来1个或者多个tensor作为输出的数据处理模型。

from keras import models
from keras import layters

model = models.Sequentail()
model.add(layers.Dense(32,input_shape=(784,)))
model.add(layers.Dense(32))


在这样的代码中,第二层的layer自动以前一层的结果大小为输入大小。

3.2 DL的基本构建:model
model的定义:一个DL的model是一个直接的、非循环的layer的图,是最直接的layers的线性表示方式,单输入并且但输出。
model包含squence和model两种模式,这在之前已经讨论过。

3.3 DL的基本构建:loss function和optimizers
loss function:它表示的是当前训练项目的成功率;
optimizers:    表示,基于当前的loss function,当前的网络采取什么样的方法优化。主要是体现在SGD的具体变化上。

对于不同类型的训练,往往都有默认的很好的optimizers选择,只有当你进行专门的训练的时候,才可能需要采用自己定义的方法。

3.4 DL训练的步骤
3.4.1 定义你的数据集
3.4.2 选择一种layers的组合方式(选择model)
3.4.3 config选择的的model
3.4.4 训练,并且得到结果
在定义的过程中,有一些思考:
a、为什么要使用激活层
否则,原系统就是原始的线性系统,缺乏灵活性。
b、关于损失函数的选择
如果你使用的是binary函数,则
loss='binary_crossentropy'
当你想使用自定义的时候,尝试这个
model.compile(optimizer=optimizers.RMSprop(lr=0.001),
loss='binary_crossentropy',
metrics=['accuracy'])

实际上,很多时候,RMSprop都是一个不错的选择。
3.5 fit()返回的是log,它是一个hash,类似这种结构
['acc','loss','val_acc','val_loss']

3.6 predict
model.predict(x_test)
是对目前一个输入测试用例的实验。

3.7 关于compile中参数的选择,这块的概论非常重要又很模糊
一个典型的compile主要解决3个问题:
optimizer是什么,loss是什么,metrics是什么。而这3个参数的选择,往往都和问题本身有关:
optimizer:优化器,为预定义优化器名或优化器对象

常见的目标函数

rmsprop:绝大多数情况下都是可用的,该优化器通常是面对递归神经网络时的一个良好选择
sgd:(似乎也是可以的)随机梯度下降法,支持动量参数,支持学习衰减率,支持Nesterov动量

loss:( categorical:绝对的;cross entropy 交叉熵)
categorical_crossentropy 最好的选择,onehot
sparse_categorical_crossentropy 当你的标签是integer的时候,选择
binary_crossentropy 2类分类的时候,选择
mse mean squared error 当你的问题是回归问题的时候选择(regression)
而mae为 mean absolute error ,能够只管地显示出你在什么时候出现overfit

可用的目标函数

  • mean_squared_error或mse

  • mean_absolute_error或mae

  • mean_absolute_percentage_error或mape

  • mean_squared_logarithmic_error或msle

  • squared_hinge

  • hinge

  • categorical_hinge

  • binary_crossentropy(亦称作对数损失,logloss)

  • logcosh

  • categorical_crossentropy:亦称作多类的对数损失,注意使用该目标函数时,需要将标签转化为形如(nb_samples, nb_classes)的二值序列

  • sparse_categorical_crossentrop:如上,但接受稀疏标签。注意,使用该函数时仍然需要你的标签与输出值的维度相同,你可能需要在标签数据上增加一个维度:np.expand_dims(y,-1)

  • kullback_leibler_divergence:从预测值概率分布Q到真值概率分布P的信息增益,用以度量两个分布的差异.

  • poisson:即(predictions - targets * log(predictions))的均值

  • cosine_proximity:即预测值与真实标签的余弦距离平均值的相反

metrics(列表,包含评估模型在训练和测试时的性能的指标)
acc和accuracy,似乎是一个东西,或者metrics={'ouput_a': 'accuracy'}

3.8 平滑绘制最后的曲线
plt.plot(range(1,len(average_mae_history)+1),average_mae_history)到
 
def smooth_curve(points,factor=0.9)
    smoothed_points = []
       for point in points:
          if smoothed_points:
             previous = smoothed_points[-1]
             smoothed_points.append(previous*factor+point*(1-factor))
           else:
              smothed_points.append(point)
     return smoothed_points
应该是有方法的,但是也是要到了多个epoch的时候才会出现这个问题。
   

​DL_WITH_PY系统学习(第3章)的更多相关文章

  1. DL_WITH_PY系统学习(第2章)

    ​ 本节提示: 1.第一个dl例子: 2.tensor和tensor操作: 3.DL如何通过逆向传播和梯度下降达到学习目的. 2.1 输入数据集的格式 ,*,))) network.add(layer ...

  2. swift系统学习第三章

    第九节:结构体-sturt //: Playground - noun: a place where people can play import UIKit /* swift学习第九节 结构体:st ...

  3. (转) TensorFlow深度学习,一篇文章就够了

    TensorFlow深度学习,一篇文章就够了 2016/09/22 · IT技术 · TensorFlow, 深度学习 分享到:6   原文出处: 我爱计算机 (@tobe迪豪 )    作者: 陈迪 ...

  4. 如何系统学习知识图谱-15年+IT老兵的经验分享

    一.前言 就IT而言,胖子哥算是老兵,可以去猝死的年纪,按照IT江湖猿龄的规矩,也算是到了耳顺之年:而就人工智能而言,胖子哥还是新人,很老的新人,深度学习.语音识别.人脸识别,知识图谱,逐个的学习了一 ...

  5. Struts2框架学习第三章——Struts2基础

    本章要点 —  Struts 1框架的基本知识 — 使用Struts 1框架开发Web应用 —  WebWork框架的基本知识 — 使用WebWork框架开发Web应用 — 在Eclipse中整合To ...

  6. 201671010140. 2016-2017-2 《Java程序设计》java学习第六章

    java学习第六章    本周对与java中的接口,lambda表达式与内部类进行了学习,以下是我在学习中的一些体会:    1.接口: <1>.接口中的所有常量必须是public sta ...

  7. 系统学习Docker 践行DevOps理念

    Docker代表的容器技术是近两年的大热技术,和人工智能.区块链等热点不同,容器技术的门槛并不高,每一个开发.测试.运维人员都能在日常工作中掌握和使用,是当今IT从业人员的必备技能之一.本课程会带大家 ...

  8. Java I/O系统学习系列二:输入和输出

    编程语言的I/O类库中常使用流这个抽象概念,它代表任何有能力产出数据的数据源对象或者是有能力接收数据的接收端对象.“流”屏蔽了实际的I/O设备中处理数据的细节. 在这个系列的第一篇文章:<< ...

  9. Docker 容器数据 持久化(系统学习Docker05)

    写在前面 本来是可以将数据存储在 容器内部 的.但是存在容器内部,一旦容器被删除掉或者容器毁坏(我亲身经历的痛,当时我们的大数据平台就是运行在docker容器内,有次停电后,不管怎样容器都起不来.以前 ...

随机推荐

  1. jenkins构建多个项目执行顺序设置

    通常我们会在jenkins中构建多个项目,那么如果项目有依赖,或者有关联怎么办?  例: 如下图: ,有两个构建项目,posWeb是个web项目,welife是接口项目. 由于接口项目数据会影响pos ...

  2. Web API 入门 二 媒体类型

    还是拿上面 那篇 Web API 入门 一  的那个来讲 在product类中加一个时间属性

  3. C#中生成的随机数为什么不随机?

    from:https://www.xcode.me/more/net-csharp-generate-random 随机数生成方法可以说是任何编程语言必备的功能,它的重要性不言而言,在C#中我们通常使 ...

  4. SQL中的replace函数

    REPLACE 用第三个表达式替换第一个字符串表达式中出现的所有第二个给定字符串表达式. 语法 REPLACE ( 'string_expression1' , 'string_expression2 ...

  5. JSP中的编码问题

    JSP文件的编码 <%@ page contentType="text/html;charset=UTF-8" language="java" %> ...

  6. 1.sklearn库的安装

    sklearn库 sklearn是scikit-learn的简称,是一个基于Python的第三方模块.sklearn库集成了一些常用的机器学习方法,在进行机器学习任务时,并不需要实现算法,只需要简单的 ...

  7. 转 VS2010 RDLC 横向合并时“未正确设置 tablix“Tablix1”的 FixedData 属性”错误解决方法 .

    最近在使用Rdlc做报表打印,有些报表的表头需要合并表头.Rdlc本身提供了横向合并的工具,但是在实际合并的时候,会出现“未正确设置 tablix“Tablix1”的 FixedData 属性.除非在 ...

  8. Spark学习之路 (十二)SparkCore的调优之资源调优

    摘抄自:https://tech.meituan.com/spark-tuning-basic.html 一.概述 在开发完Spark作业之后,就该为作业配置合适的资源了.Spark的资源参数,基本都 ...

  9. Spark学习之路 (六)Spark Transformation和Action

    Transformation算子 基本的初始化 java static SparkConf conf = null; static JavaSparkContext sc = null; static ...

  10. xlrd、xlwt

    一个公司内,销售或者人事都是使用excel来记录员工的信息,所以介绍可操作excel文件的xlrd.xlwt模块. 其中xlrd模块实现对excel文件内容读取,xlwt模块实现对excel文件的写入 ...