认识tensorflow - 【老鱼学tensorflow2】
深度学习是模仿了生物的神经元的概念,你可以想象用一大堆的神经元通过各种刺激来对外部世界进行感知,从而建立起对外部世界的模型。
比如给你一个数据对:
| 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】的更多相关文章
- 二分类问题续 - 【老鱼学tensorflow2】
前面我们针对电影评论编写了二分类问题的解决方案. 这里对前面的这个方案进行一些改进. 分批训练 model.fit(x_train, y_train, epochs=20, batch_size=51 ...
- 二分类问题 - 【老鱼学tensorflow2】
什么是二分类问题? 二分类问题就是最终的结果只有好或坏这样的一个输出. 比如,这是好的,那是坏的.这个就是二分类的问题. 我们以一个电影评论作为例子来进行.我们对某部电影评论的文字内容为好评和差评. ...
- tensorflow卷积神经网络-【老鱼学tensorflow】
前面我们曾有篇文章中提到过关于用tensorflow训练手写2828像素点的数字的识别,在那篇文章中我们把手写数字图像直接碾压成了一个784列的数据进行识别,但实际上,这个图像是2828长宽结构的,我 ...
- numpy有什么用【老鱼学numpy】
老鱼为了跟上时代潮流,也开始入门人工智能.机器学习了,瞬时觉得自己有点高大上了:). 从机器学习的实用系列出发,我们会以numpy => pandas => scikit-learn =& ...
- 为何学习matplotlib-【老鱼学matplotlib】
这次老鱼开始学习matplotlib了. 在上个pandas最后一篇博文中,我们已经看到了用matplotlib进行绘图的功能,这次更加系统性地学习一下关于matplotlib的功能. matlab由 ...
- tensorflow RNN循环神经网络 (分类例子)-【老鱼学tensorflow】
之前我们学习过用CNN(卷积神经网络)来识别手写字,在CNN中是把图片看成了二维矩阵,然后在二维矩阵中堆叠高度值来进行识别. 而在RNN中增添了时间的维度,因为我们会发现有些图片或者语言或语音等会在时 ...
- tensorflow保存读取-【老鱼学tensorflow】
当我们对模型进行了训练后,就需要把模型保存起来,便于在预测时直接用已经训练好的模型进行预测. 保存模型的权重和偏置值 假设我们已经训练好了模型,其中有关于weights和biases的值,例如: im ...
- tensorflow用dropout解决over fitting-【老鱼学tensorflow】
在机器学习中可能会存在过拟合的问题,表现为在训练集上表现很好,但在测试集中表现不如训练集中的那么好. 图中黑色曲线是正常模型,绿色曲线就是overfitting模型.尽管绿色曲线很精确的区分了所有的训 ...
- tensorflow分类-【老鱼学tensorflow】
前面我们学习过回归问题,比如对于房价的预测,因为其预测值是个连续的值,因此属于回归问题. 但还有一类问题属于分类的问题,比如我们根据一张图片来辨别它是一只猫还是一只狗.某篇文章的内容是属于体育新闻还是 ...
- tensorflow Tensorboard2-【老鱼学tensorflow】
前面我们用Tensorboard显示了tensorflow的程序结构,本节主要用Tensorboard显示各个参数值的变化以及损失函数的值的变化. 这里的核心函数有: histogram 例如: tf ...
随机推荐
- windows条件下安装linux双系统
工具: U盘 + rufus(使用烧录进linux镜像) linux镜像 1.windows 管理-压缩卷出一块空闲的磁盘空间(不要使用) 重启电脑 启动项 U盘启动 linux就自动安装,选 ...
- Swagger (API框架,API 文档 与API 定义同步更新)
1.依赖 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring ...
- SourceTree 合并DEV分支到master
SourceTree 合并DEV分支到master 1 切换到master分支 2 右键dev分支,选择 合并dev至当前分支 3 提交代码
- k8s资源管理中request和limit的区别
在 Kubernetes(K8s)中,request和limit是两个重要的概念,用于控制和管理容器的资源使用. Request(请求): request定义了容器启动时需要保证的最小资源量.这表示K ...
- python的替换函数strip(),replace()和re.sub()实例分析
前记: python是一个非常好用的语言,能够帮忙处理很多日常的耗费体力的事情.今天做一个脚本的时候,遇到了python替换的问题,这里就梳理一下知识点吧. 概念: 1.replace() 基本用法: ...
- UDP、IMCP、ARP协议通过netmap解析的实现。
上一篇文章我们讲了一个异步的线程池大概需要如何去实现,现在的话,我们如何来解析一个UDP的包. 环境的搭配 这个环境的问题困扰了很久,这个netmap已经不再更新了,支持Ubuntu16.04-Ubu ...
- KTL 最新版
K,K线,Candle蜡烛图. T,技术分析,工具平台 L,公式Language语言使用c++14,Lite小巧简易. 项目仓库:https://github.com/bbqz007/KTL Core ...
- Android 开发Day10
这是main里面的所有代码,按版本修改过 AndroidManifest.xml <?xml version="1.0" encoding="utf-8" ...
- CSS(语义化标签、多媒体标签、新表单元素、属性选择器、结构伪类选择器、伪元素选择器、盒子模型、滤镜、calc函数、过渡)
一.HTML5新特性 概述 HTML5 的新增特性主要是针对于以前的不足,增加了一些新的标签.新的表单和新的表单属性等. 这些新特性都有兼容性问题,基本是 IE9+ 以上版本的浏览器才支持,如果不考虑 ...
- C++ Qt开发:QUdpSocket网络通信组件
Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍如何运用QUd ...