神经元网络深度学习的起步程序 Hello World

第一个应用程序总是应该从超级简单的东西开始,这样可以看到代码如何产生和运作的整体框架。

就创建神经网络而言,我喜欢使用的例子是一个能够学习两组数字之间函数关系的神经元。具体来说,如果你在写下面函数的代码,表明你已经知道了这个函数的"规则",即x和y的映射关系。

那么,如何训练一个神经网络来完成同等的任务呢? 用数据!用数据来训练神经网络。通过给它输入一组X,和一组Y,它应该能够找出它们之间的关系。

这显然和你习惯的范式很不一样,所以让我们一步步来了解它。

float hw_function(float x){
float y = (2 * x) - 1;
return y;
}

导入tensorflow

让我们从导入TensorFlow开始。为了方便后续使用,我们把它叫做tf。

然后我们导入一个名为numpy的库,它可以帮助我们方便快捷地将数据表示为列表。

定义神经网络的框架叫做keras,它将神经元网络模型定义为一组Sequential层。Keras库也需要导入。

import tensorflow as tf
import numpy as np
from tensorflow import keras

定义并编译神经元网络

接下来我们将创建一个最简单的神经网络。它只有1层,且这层只有1个神经元,它的输入只是1个数值。

model = tf.keras.Sequential([keras.layers.Dense(units=1, input_shape=[1])])

在编译神经网络时,我们必须指定2个函数:一个损失函数和一个优化器。

如果你读过很多有关机器学习的数学理论,这里通常是用到它们的地方。但Tensorflow将这些数学很好地封装在函数中供你使用。那么这个程序里到底发生了什么?我们来看一下:

我们知道,在上面的函数中,两组数字之间的关系其实是y=2x-1。当计算机试图 "学习 "这个映射关系时,它猜测......也许y=10x+10。LOSS(损失)函数将猜测的答案与已知的正确答案进行比较,并衡量偏差程度。然后,计算机使用OPTIMIZER函数再做一次猜测,努力使损失最小化。这时,也许计算机会得出一些像y=5x+5这样的结果,虽然还是很糟糕,但更接近正确的结果(即损失更低)。训练的时候,将依据指定的EPOCHS次数,重复这样的猜测与优化过程。

下面的程序中可以看到如何设置用 "平均平方误差 "来计算损失,并使用 "同步梯度下降 "来优化神经元网络。你并不需要理解背后的这些数学,但你可以看到它们的成效! :)

随着经验的积累,你将了解如何选择相应的损失和优化函数,以适应不同的情况。

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

提供训练数据

下来我们将提供一些数据。对于本案例,我们提供6个X和6个Y。可以看到它们之间的关系是y=2x-1,所以当X=-1,y=-3,以此类推

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函数时,神经网络“学习”X和Y之间的关系。在这个过程中,它将一次又一次地完成上面所说的循环,即做一个猜测,衡量它有多好或多坏(又名损失),使用Opimizer进行再一次猜测,如此往复。训练将根据指定的遍数(epochs)执行此操作。当运行此代码时,将在输出结果中看到损失(loss)。

model.fit(xs, ys, epochs=500)

到这里为止模型已经训练好了,它学习了X和Y之间的关系。现在,你可以使用model.predict方法来让它计算未知X对应的Y。例如,如果X=10,你认为Y会是什么?在运行下面代码之前,请猜一猜:

print(model.predict([10.0]))

你可能会想到19岁,对吧?但最后输出比19低了一丁点儿。这是为什么呢?因为神经网络处理的是概率,所以根据我们向神经元网络提供的数据,它计算出X和y之间的关系是y=2x-1的概率非常高。但由于只有6个数据点,无法完全确定x和y的函数关系。因此,10对应的y值非常接近19,但不一定正好是19。当使用神经网络时,会看到这种模式反复出现。你几乎总是在处理概率,而非确定的数值。并经常需要通过进一步编写程序,来找出概率所对应的结果,特别当处理分类问题时。

TensorFlow入门实操课程第一章教程笔记的更多相关文章

  1. TensorFlow入门实操课程第一章练习笔记

    在本练习中,您将尝试构建一个神经网络,让它根据一个简单的公式来预测房屋的价格. 想象一下,如果房子的定价很简单,带一间卧室的房子价格是5万+5万,那么一间卧室的房子要花10万元:两间卧室的房子就要花1 ...

  2. 百度NLP预训练模型ERNIE2.0最强实操课程来袭!【附教程】

    2019年3月,百度正式发布NLP模型ERNIE,其在中文任务中全面超越BERT一度引发业界广泛关注和探讨.经过短短几个月时间,百度ERNIE再升级,发布持续学习的语义理解框架ERNIE 2.0,及基 ...

  3. javascript进阶课程--第一章--函数

    javascript进阶课程--第一章--函数 学习要点 了解内存管理 掌握全局函数的使用 知识点 基本类型和引用类型 基本类型值有:undefined,NUll,Boolean,Number和Str ...

  4. Spring实战第一章学习笔记

    Spring实战第一章学习笔记 Java开发的简化 为了降低Java开发的复杂性,Spring采取了以下四种策略: 基于POJO的轻量级和最小侵入性编程: 通过依赖注入和面向接口实现松耦合: 基于切面 ...

  5. Java程序设计(2021春)——第一章续笔记与思考

    Java程序设计(2021春)--第一章续笔记与思考 目录 Java程序设计(2021春)--第一章续笔记与思考 Java数据类型 基本数据类型 引用类型 基本数据类型--整数类型的细节 基本数据类型 ...

  6. [蛙蛙推荐]SICP第一章学习笔记-编程入门

    本书简介 <计算机程序的构造与解释>这本书是MIT计算机科学学科的入门课程, 大部分学生在学这门课程前都没有接触过程序设计,也就是说这本书是针对编程新手写的. 虽然是入门课程,但起点比较高 ...

  7. Ionic 入门与实战之第一章:Ionic 介绍与相关学习资源

    原文发表于我的技术博客 本文是「Ionic 入门与实战」系列连载的第一章,主要对 Ionic 的概念.发展历程.适配的移动平台等知识进行了介绍,并分享了 Ionic 相关的学习资源. 原文发表于我的技 ...

  8. Jenkins入门系列之——01第一章 Jenkins是什么?

    第一章 Jenkins是什么? Jenkins 是一个可扩展的持续集成引擎. 主要用于: l 持续.自动地构建/测试软件项目. l 监控一些定时执行的任务. Jenkins拥有的特性包括: l 易于安 ...

  9. Day1 《机器学习》第一章学习笔记

    <机器学习>这本书算是很好的一本了解机器学习知识的一本入门书籍吧,是南京大学周志华老师所著的鸿篇大作,很早就听闻周老师大名了,算是国内机器学习领域少数的大牛了吧,刚好研究生做这个方向相关的 ...

随机推荐

  1. opencv——图像遍历以及像素操作

    摘要 我们在图像处理时经常会用到遍历图像像素点的方式,在OpenCV中一般有四种图像遍历的方式,在这里我们通过像素变换的点操作来实现对图像亮度和对比度的调整. 补充: 图像变换可以看成 像素变换--点 ...

  2. web&HTML

    内容索引 1. web概念概述 2. HTML web概念概述 * JavaWeb: * 使用Java语言开发基于互联网的项目 * 软件架构: 1. C/S: Client/Server 客户端/服务 ...

  3. 面试题:ArrayList、LinkedList、Vector三者的异同?

    面试题:ArrayList.LinkedList.Vector三者的异同? 同:三个类都是实现了List接口(Collection的子接口之一),存储数据的特点相同:存储有序的.可重复的数据不同: * ...

  4. IntelliJ IDEA 老司机,还没用过 Stream Trace 功能?

    前言 自从 Java 8 开始,作为程序员的我们都离不开 Stream 相关功能的使用,书写起来那叫一个流畅(这个 feel--).但总是有一些时候,我们对 stream 的操作所要的结果和预期不符, ...

  5. 通过CRM系统实现工作流程自动化

    灵活运用CRM系统所拥有的自动化功能模块,是公司在快速发展和降低成本的关键保障.不管您的公司规模的大小,您企业的工作流程都必须遵照相同的流程反复操作.这种反复的工作是一个效率黑洞,长久以往会导致人力资 ...

  6. yiled

    def fib(max): n,a,b = 0,0,1 while n < max: print("hallo") yield b #把函数执行过程冻结在这一步,并且把b的值 ...

  7. [Java] Spring 示例

    (一)IoC/DI 功能 配置解析:将配置文件解析为BeanDefinition结构,便于BeansFactory创建对象 对象创建:BeansFactory 根据配置文件通过反射创建对象,所有类对象 ...

  8. Linux_进程管理的基本概述

    一.进程的基本概述 1️⃣:进程是已启动的可执行程序的运行中实例 2️⃣:/proc目录下以数字为名的目录,每一个目录代表一个进程,保存着进程的属性信息 3️⃣:每一个进程的PID是唯一的,就算进程退 ...

  9. 如果你想设置无人自动升级,我们推荐你将这个值修改为security,它会告诉 yum 仅仅升级修复安全问题的软件包。

    定期升级你的 CentOS 系统,是所有系统安全中最重要的措施之一.如果你不使用最新的安全补丁升级你的操作系统软件包,你将会让你的机器很容易被攻击. 如果你管理者多个 CentOS 机器,手动升级系统 ...

  10. 062.Python前段框架Django视图CBV

    一 CBV与FBV CBV:Class Based View FBV:Function Based View 之前写过的都是基于函数的view,就叫FBV.还可以把view写成基于类的,那就是CBV. ...