深度学习是模仿了生物的神经元的概念,你可以想象用一大堆的神经元通过各种刺激来对外部世界进行感知,从而建立起对外部世界的模型。

比如给你一个数据对:

x y
-1 -3
0 -1
1 1
2 3
3 5
4 7

我们可以使用深度学习通过从数据中学习来了解其中的规律,类似人类的学习,从我们的感知和实践中认识世界。

我们从直观的方式来看一下这些数据具有什么规律。

import numpy as np
import matplotlib.pyplot as plt
xs = np.array([-1.0, 0, 1, 2, 3, 4], dtype=float)
ys = np.array([-3, -1, 1, 3, 5, 7], dtype=float) plt.plot(xs, ys)
plt.show()

显示的图形为:



从肉眼上看直观的感觉是线性关系,我们用深度学习来训练一下模型(假设我们不知道这个数据的规律的情况下)

import tensorflow as tf
import numpy as np
import tensorflow.keras as keras xs = np.array([-1.0, 0, 1, 2, 3, 4], dtype=float)
ys = np.array([-3, -1, 1, 3, 5, 7], dtype=float) model = keras.models.Sequential([
keras.layers.Dense(units=1, input_shape=[1])
])
model.compile(optimizer='sgd', loss='mean_squared_error')
model.fit(xs, ys, epochs=500)
print(model.predict([10.0]))

关于深度学习的代码不多,我们一个一个来稍微简单介绍一下。

model = keras.models.Sequential([
...
])

keras.models.Sequential() :建立了一个顺序堆叠的模型,就像乐高积木一样,这是一个一层一层顺序堆叠起来的模型,其它估计还有分支一样的模型。

在这个顺序堆叠的模型中,其中首先加入了一个层(你可以理解为一块乐高积木)为:keras.layers.Dense ,这是一个全连接层,也就是其神经元前面和后面全连接,就像我们大脑中的一个皮层,你可以想象成前面有很多插口线,后面也有很多输出线。而这里我们只定义了一个输入只有一个插口(输入参数为一维),输出也只有一个输出线(输出为一个数值)。

为何输入只有一维、输出也只有一维呢?

那是因为我们的数据中输入只有一维的x,输出也只有一维的y。

在定义好了模型后,可以对这个模型进行编译了,编译也很简单,只要调用model.compile()函数就可以,不过这里需要指定两个参数,这是本程序中相对比较难理解的部分。

首先指定了一个损失函数loss,损失函数用来确地我们是否学习到了,也就是我们要有一个评判我们是否学到了东西的函数,在深度学习中用损失函数来定义,比如这里用mean_squared_error来定义,也就是均方差,让神经网络的输出值尽量地同期望的输出值接近。

另一个参数是优化器optimizer。这里使用sgd优化算法,优化器本身就是一个函数,其目的是通过优化算法让损失值尽量地减少。

keras中有多种优化器,这里使用梯度下降算法来进行优化。

最后通过model.fit(xs, ys, epochs=500)来进行训练,训练的迭代次数用500次。

当模型训练完成后,我们就可以用此模型来进行model.predict([10.0])预测。

通过这样简单的一小段代码就实现了一个深度学习的程序。

认识tensorflow - 【老鱼学tensorflow2】的更多相关文章

  1. 二分类问题续 - 【老鱼学tensorflow2】

    前面我们针对电影评论编写了二分类问题的解决方案. 这里对前面的这个方案进行一些改进. 分批训练 model.fit(x_train, y_train, epochs=20, batch_size=51 ...

  2. 二分类问题 - 【老鱼学tensorflow2】

    什么是二分类问题? 二分类问题就是最终的结果只有好或坏这样的一个输出. 比如,这是好的,那是坏的.这个就是二分类的问题. 我们以一个电影评论作为例子来进行.我们对某部电影评论的文字内容为好评和差评. ...

  3. tensorflow卷积神经网络-【老鱼学tensorflow】

    前面我们曾有篇文章中提到过关于用tensorflow训练手写2828像素点的数字的识别,在那篇文章中我们把手写数字图像直接碾压成了一个784列的数据进行识别,但实际上,这个图像是2828长宽结构的,我 ...

  4. numpy有什么用【老鱼学numpy】

    老鱼为了跟上时代潮流,也开始入门人工智能.机器学习了,瞬时觉得自己有点高大上了:). 从机器学习的实用系列出发,我们会以numpy => pandas => scikit-learn =& ...

  5. 为何学习matplotlib-【老鱼学matplotlib】

    这次老鱼开始学习matplotlib了. 在上个pandas最后一篇博文中,我们已经看到了用matplotlib进行绘图的功能,这次更加系统性地学习一下关于matplotlib的功能. matlab由 ...

  6. tensorflow RNN循环神经网络 (分类例子)-【老鱼学tensorflow】

    之前我们学习过用CNN(卷积神经网络)来识别手写字,在CNN中是把图片看成了二维矩阵,然后在二维矩阵中堆叠高度值来进行识别. 而在RNN中增添了时间的维度,因为我们会发现有些图片或者语言或语音等会在时 ...

  7. tensorflow保存读取-【老鱼学tensorflow】

    当我们对模型进行了训练后,就需要把模型保存起来,便于在预测时直接用已经训练好的模型进行预测. 保存模型的权重和偏置值 假设我们已经训练好了模型,其中有关于weights和biases的值,例如: im ...

  8. tensorflow用dropout解决over fitting-【老鱼学tensorflow】

    在机器学习中可能会存在过拟合的问题,表现为在训练集上表现很好,但在测试集中表现不如训练集中的那么好. 图中黑色曲线是正常模型,绿色曲线就是overfitting模型.尽管绿色曲线很精确的区分了所有的训 ...

  9. tensorflow分类-【老鱼学tensorflow】

    前面我们学习过回归问题,比如对于房价的预测,因为其预测值是个连续的值,因此属于回归问题. 但还有一类问题属于分类的问题,比如我们根据一张图片来辨别它是一只猫还是一只狗.某篇文章的内容是属于体育新闻还是 ...

  10. tensorflow Tensorboard2-【老鱼学tensorflow】

    前面我们用Tensorboard显示了tensorflow的程序结构,本节主要用Tensorboard显示各个参数值的变化以及损失函数的值的变化. 这里的核心函数有: histogram 例如: tf ...

随机推荐

  1. Python回顾面向对象

    [一]面向过程开发和面向对象开发 [1]面向过程包括函数和面条 包括面条版本一条线从头穿到尾 学习函数后开始对程序进行分模块,分功能开发 学习模块化开发,我们就可以对我们的功能进行分类开发 建一个功能 ...

  2. 将Abp移植进.NET MAUI项目(二):配置与基类编写

    ​ 因为我们要做一个数据持久化型的小应用,所以在完成Abp功能的集成后,我们需要做数据库相关的配置工作 配置数据库 在MauiBoilerplate.Core项目中,添加两个实体类: 我们简单的写一个 ...

  3. 跨域测试代码 - console 里面直接就可以测试

    跨域测试代码 - console 里面直接就可以测试 var xhr = new XMLHttpRequest(); xhr.open("GET", "https://w ...

  4. 测试打包失败 已解决 分析过程 - 关键字 Jenkins nexus package-lock.json npm install build

    Jenkins 打包失败 npm run build 总是失败,每次失败报错还不一样. 然后 npm install 每次安装 还总有包超时 MobaXterm1_CHS1 SSH 链接,手工安装也不 ...

  5. python下进行10进制转16进制不带0x并且将16进制转成小端序

    前记   python涉及到和硬件互交的部分,一般是需要发送十六进制的帧长的.所以,python这个转换还是经常使用的.笔者在这里遇到了一个问题.就做一个记录吧. 基本方法:  假如你熟悉python ...

  6. const用法及与constexpr区别总结

    1.用const修饰函数的参数 参数是值传递 由于函数将自动产生临时变量复制该参数,该参数无需保护,没必要用const 参数是指针传递或者引用传递 const修饰的指针或引用所指向的值不可变.如果该参 ...

  7. 开发进阶系列:Java并发之从基础到框架

    一  线程基础 1.synchronized取得的锁都是对象锁,哪个线程执行synchronized修饰的方法,哪个线程就获得这个方法所属对象的锁.不同对象不同锁,互不影响. 另一种情况是static ...

  8. 7.3万字肝爆Java8新特性,我不信你能看完!(建议收藏)

    大家好,我是冰河~~ 说实话,肝这篇文章花了我一个月的时间,关于Java8的新特性全在这儿了,建议先收藏后阅读. Java8有哪些新特性? 简单来说,Java8新特性如下所示: Lambda表达式 函 ...

  9. modelsim常用操作之波形仿真

    modelsim波形仿真的新手问题 1.实验目的 在刚接触modelsim时,被其繁复的操作流程所困,一度只能依靠在quartus中修改代码编译后再重启modelsim,自动导入才能得到波形.这样的操 ...

  10. KingbaseES V8R6运维案例之---sys_waldump解析wal日志

    案例说明: wal日志文件记录了,事务操作的redo日志信息,由于wal日志文件是二进制文件,无法直接读取其文件内容.sys_waldump 可以解决这个问题,通过sys_waldump来解析wal ...