机器学习范式是这样的,你有数据,这些数据被标记,你想找出匹配数据和标签的规则。在代码中显示这一点的最简单的可能场景如下。

考虑以下两组数字:

X = –1, 0, 1, 2, 3, 4 
Y = –3, –1, 1, 3, 5, 7

X和Y值之间存在关系(例如,如果X是-1,那么Y是-3,如果X是3,那么Y是5,等等)。你能看到吗?

几秒钟后,你可能会发现这里的模式是Y = 2X - 1。你怎么弄到的?不同的人用不同的方法计算,但我经常听到这样的说法X在它的序列中增加了1,Y增加了2;因此,Y = 2X +/ -某项。当X = 0时,Y = - 1,结果是Y = 2X - 1。然后再看其他的值,发现这个假设“符合”,结果就是Y = 2X - 1。

这和机器学习过程非常相似。让我们来看看一些TensorFlow代码,你可以编写一个神经网络来帮你解决这个问题。

下面是完整的代码,使用TensorFlow Keras APIs。如果还不理解也不用担心;我们将一行一行地讨论:

import tensorflow as tf
import numpy as np
from tensorflow.keras import Sequential
from tensorflow.keras.layers import Densemodel =Sequential([Dense(units=1,input_shape=[1])])
model.compile(optimizer='sgd',loss='mean_squared_error')Xs=np.array([-1.0,0.0,1.0,2.0,3.0,4.0],dtype=float)
Ys=np.array([-3.0,-1.0,1.0,3.0,5.0,7.0],dtype=float)model.fit(Xs,Ys,epochs=500)print(model.predict([10.0]))

先说第一行。你可能听说过神经网络,你可能见过用多层互连神经元来解释它们的图表,有点像图1.1。

Fig1.1 一中典型的神经网络

当你看到这样一个神经网络时,把每个“圆”看成一个神经元,每个圆列看成一个层。所以,在Fig1.1中,有三层:第一层有五个神经元,第二层有四个,第三层有两个。

如果我们回头看看我们的代码,只看第一行,我们会看到我们定义了最简单的神经网络。只有一层,它只包含一个神经元:

model =Sequential([Dense(units=1,input_shape=[1])])

使用TensorFlow时,使用Sequential定义图层。在Sequential中,您可以指定每个层的外观。我们的Sequential中只有一行,所以我们只有一层。

然后,可以使用keras.layers应用编程接口定义图层的外观。有许多不同的图层类型,但这里我们使用的是Dense图层。“Dense”是指一组完全(或密集)连接的神经元,这就是你在Fig1.1中看到的,其中每个神经元都连接到下一层的每个神经元。这是最常见的图层类型。我们的密集层有指定的units=1,所以我们只有一个Dense层,在整个神经网络中有一个神经元。最后,当您指定神经网络中的第一层(在这种情况下,这是我们唯一的一层)时,您必须告诉它输入数据input_shape的形状是什么。在这种情况下,我们的输入数据是我们的X,它只是一个值,所以我们指定这是它的形状。

下一行是乐趣真正开始的地方。让我们再看一遍:

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

如果你以前对机器学习做过什么,你可能已经看到它涉及到很多数学。如果你几年没学过微积分,它可能看起来像是入学的障碍。这就是数学的作用——它是机器学习的核心。

在这种情况下,计算机不知道X和Y之间的关系是什么。所以它会猜测。比如说它猜测Y = 10X + 10。然后,它需要衡量这种猜测有多好或多坏。这是损失函数(loss)的工作。当X为–1、0、1、2、3和4时,它已经知道答案,因此损失函数可以将这些答案与猜测关系的答案进行比较。

如果猜到Y = 10X + 10,那么当X为–1时,Y为0。正确答案是–3,所以有点偏。但当X为4时,猜测答案为50,而正确答案为7。那真的很遥远。

有了这些知识,计算机就可以进行另一种猜测。这是优化器(optimizer)的工作。这是使用重微积分的地方,但是有了TensorFlow,你就不用“理会”这些数学知识。您只需为不同的场景选择合适的优化器。在本例中,我们选择了一个名为sgd的函数,它代表随机梯度下降,这是一个复杂的数学函数,当给定值、先前的猜测以及计算该猜测的误差(或损失)的结果时,可以生成另一个。随着时间的推移,它的工作是最小化损失,这样做可以使猜测的公式越来越接近正确的答案。

SGD(Gradient descent (with momentum) optimizer)

tf.keras.optimizers.SGD(lr=0.01, momentum=0.0, decay=0.0, nesterov=False)

随机梯度下降优化器

包含扩展功能的支持: - 动量(momentum)优化, - 学习率衰减(每次参数更新后) - Nestrov 动量 (NAG) 优化

参数

  • lr: float >= 0. 学习率。
  • momentum: float >= 0. 参数,用于加速 SGD 在相关方向上前进,并抑制震荡。
  • decay: float >= 0. 每次参数更新后学习率衰减值。
  • nesterov: boolean. 是否使用 Nesterov 动量。

参考一:使用动量(Momentum)的SGD、使用Nesterov动量的SGD

参考二:比Momentum更快:揭开Nesterov Accelerated Gradient的真面目 郑华滨

接下来,我们简单地将我们的数字格式化为层所期望的数据格式。在Python中,有一个名为Numpy的库,张量流可以使用它,在这里,我们将我们的数字放入Numpy数组中,以便于处理它们:

Xs=np.array([-1.0,0.0,1.0,2.0,3.0,4.0],dtype=float)
Ys=np.array([-3.0,-1.0,1.0,3.0,5.0,7.0],dtype=float)

学习过程将从model.fit命令开始,如下所示:

model.fit(Xs,Ys,epochs=500)

你可以把它理解为“让Xs适应Ys,试500次。”因此,在第一次尝试时,计算机会猜测这种关系(即,类似Y = 10X + 10的东西),并衡量这种猜测的好坏。然后,它将这些结果反馈给优化器,优化器将生成另一个猜测。然后,这个过程将被重复,其逻辑是损失(或误差)将随着时间的推移而下降,结果“猜测”将变得越来越好。

我们可以看到,在前10个时期,损失从3.2868上升到0.9682。也就是说,仅经过10次尝试,网络的表现就比最初猜测的要好三倍。然后看看第500个批次发生了什么(Fig1.2、Fig1.3)。

Fig1.2 训练神经网络

Fig1.3 训练神经网络-最后五个批次

我们现在可以看到损失是2.61*10^-5。损失变得如此之小,以至于该模型已经很好地计算出数字之间的关系是Y = 2X-1。机器已经学会了它们之间的模式。

然后,我们的最后一行代码使用训练好的模型进行预测,如下所示:

print(model.predict([10.0]))

Notes:术语Prediction通常被用来处理机器学习模型问题。不过,不要把它当成展望未来!使用这个术语是因为我们在处理一定程度的不确定性。回想一下我们之前谈到的活动检测场景。当这个人以一定的速度移动时,她可能是在走路。同样,当一个模型了解了两件事情之间的模式时,它会告诉我们答案可能是什么。换句话说,就是预测答案。(稍后,您还将学习推理,其中模型从众多答案中选择一个,并推断它选择了正确的答案。)

当X = 10时让模型预测Y你们认为答案会是什么?你可能会马上想到19岁,但这是不对的。它会选择一个非常接近19的值。这有几个原因。首先,我们的损失不是零。它仍然是一个非常小的量,所以我们可以预期,任何预测的答案都会有非常小的偏差。
其次,只在少量的数据上训练神经网络——在这种情况下只有六对(X,Y)值。

这个模型只有一个神经元,这个神经元学习一个权重和一个偏差,所以Y = WX + B。这看起来就像我们想要的关系Y = 2X–1,我们希望它学习W = 2和B =–1。假设模型只在六项数据上进行训练,那么答案永远不会是这些值,而是非常接近的值。

自己运行代码看看能得到什么。当我运行它时,我得到了18.977888,但是你的答案可能略有不同,因为当神经网络第一次初始化时,有一个随机元素:你的初始猜测将与我的略有不同,也与第三个人的略有不同。

小结:

你的第一个机器学习“Hello World”到此结束。你可能会想,对于像确定两个值之间的线性关系这样简单的事情来说,这似乎是大材小用。你是对的。但是最酷的是,我们在这里创建的代码模式与用于更复杂场景的模式是一样的。你将在第二章开始看到这些,在那里我们将探索一些基本的计算机视觉技术——机器将学会“看到”图像中的模式,并识别其中的内容。

1 ai and machine learning for coders Laurence Moroney学习笔记(一)开始机器学习之旅(Getting Started with ML)相关推荐

  1. 3.2.1 ai and machine learning for coders Laurence Moroney 学习笔记(三)chapter3-检测图像中的特征-3.2 建立CNN区分人和马

    在本节中,我们将探索一个比Fashion MNIST分类器更复杂的场景.我们将扩展关于卷积和卷积神经网络的知识,尝试对特征位置不总是在同一位置的图像内容进行分类.为此,我创建了马或人类数据集. 代码示 ...

  2. 2 ai and machine learning for coders Laurence Moroney 学习笔记(二)chapter2 计算机视觉导论(Introduction to CV))

    前一章介绍了机器学习工作原理的基础知识.您了解了如何开始使用神经网络编程来将数据与标签匹配,以及如何从中推断可用于区分项的规则.一个合乎逻辑的下一步是将这些概念应用到计算机视觉中,在那里我们将有一个模 ...

  3. Titanic: Machine Learning from Disaster-kaggle入门赛-学习笔记

    Titanic: Machine Learning from Disaster 对实验用的数据的认识,数据中的特殊点/离群点的分析和处理,特征工程(feature engineering)很重要. 注 ...

  4. Machine Learning In Action 第二章学习笔记: kNN算法

    本文主要记录<Machine Learning In Action>中第二章的内容.书中以两个具体实例来介绍kNN(k nearest neighbors),分别是: 约会对象预测 手写数 ...

  5. 机器学习 Machine Learning中一元线性回归的学习笔记~

    1 前言 今天在做 Machine Learning的作业~ 2 一元线性回归 2.1 loss函数 带有规范化的loss函数: J(θ)=12m∑i=1m(hθ(x(i))−y(i))2+λ2m∑j ...

  6. 机器学习 Machine Learning中多元线性回归的学习笔记~

    1 前言 今天在做 Machine Learning中多元线性回归的作业~ 2 Machine Learning中多元线性回归 2.1 Feature Scaling和 Mean Normalizat ...

  7. AI Studio 飞桨 零基础入门深度学习笔记1-深度学习的定义

    AI Studio 飞桨 零基础入门深度学习-笔记 人工智能.机器学习.深度学习的关系 机器学习 机器学习的实现 机器学习的方法论 案例:牛顿第二定律 确定模型参数 模型结构介绍 深度学习 神经网络的 ...

  8. Foundations of Machine Learning 2nd——第二章 PAC学习框架 后记

    Foundations of Machine Learning 2nd--第二章 PAC学习框架后记 前言 Generalities 一般性 可确定性 VS 随机场景 定义1 Agnostic PAC ...

  9. Foundations of Machine Learning 2nd——第二章 PAC学习框架

    Foundations of Machine Learning 2nd--第二章 PAC学习框架 前言 定义介绍 Generalization error Empirical error 定理1 PA ...

最新文章

  1. linux系统中tar命令的使用,linux 系统的tar命令使用方法详解
  2. 广域网结构和我国通信网的构成
  3. TCP/IP和OSI4层、7层协议介绍
  4. bzoj3714:[PA2014]Kuglarz
  5. 关于中文 Word Simialrity 的一个新思路
  6. Web Server监视器 v0.75 - Free tool
  7. mongodb默认的用户名密码_Windows下MongoDB设置用户、密码
  8. Compound创始人:Compound链要成为一个单一全球流动性网络
  9. bzoj 1702: [Usaco2007 Mar]Gold Balanced Lineup 平衡的队列
  10. python拟合曲线求方程,曲线拟合方程python
  11. OFD电子文档阅读器功能说明
  12. Can't create pdf file with font calibri bold 错误解决方案
  13. 如果你是我眼中一滴泪,那么我永远不会哭
  14. java mediator_Java 实现中介者(Mediator)模式
  15. 简单的网易云音乐热门评论爬虫
  16. 猿团,如何用远程工作技术云平台,打开IT人才共享市场?
  17. 关于人工智能,你知道怎么学吗
  18. 画论51 沈灏《画尘》
  19. 後は勉強をもっともっと頑張りましょう、自分の人生は自分で切り開くしかありません...
  20. 各大高校研究生录取通知书争奇斗艳美到哭,我也想要!

热门文章

  1. androidtest 31
  2. dp线长什么样子_显示器上的DP接口是什么接口?
  3. Unity学习——射箭游戏
  4. 基础知识大全(LATEX,三角函数变换)
  5. 8月12日 网工学习 Console线缆 Mini USB口登录 SecureCRT终端设置
  6. PySpark SQL 相关知识介绍
  7. 近世代数1:映射,变换
  8. ubuntu16.04 Inter D415安装指南(SDK+ROS+Python)
  9. 酷狗繁星主播怎么pk连麦?怎么第一时间去吸粉?
  10. 手机rom制作,我们应该知道的那些事