热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

深度学习之TensorFlow安装与初体验

深度学习之TensorFlow安装与初体验学习前搞懂一些关系和概念首先,搞清楚一个关系:深度学习的前身是人工神经网络,深度学习只是人工智能的一种,深层次的神经网络结构就是深度学习的模型,浅层

深度学习之TensorFlow安装与初体验

学习前

搞懂一些关系和概念
首先,搞清楚一个关系:深度学习的前身是人工神经网络,深度学习只是人工智能的一种,深层次的神经网络结构就是深度学习的模型,浅层次的神经网络结构是浅度学习的模型。

深度人工神经网络模型

浅度学习:层数少于3层,使用全连接的一般被认为是浅度神经网络,也就是浅度学习的模型,全连接的可能性过于繁多,如果层数超过三层,计算量呈现指数级增长,计算机无法计算到结果,所以产生了深度学习概念

深度学习:层数可以有很多层,但是并不是全连接的传递参数,如上图中右边是一个7层的神经网络模型,其中隐藏层就是所谓的“学习”过程,我们所说的深度也是指隐藏层的深度。图中的有一处容易使人误解,右侧深度神经网络看上去是全连接的,但实际学习过程只采用部分的神经元,并非每一个神经元都互相连接的。如果深度+全连接的话,当前计算机还做不到那么庞大的计算量,模型是不切实际的。

最后,关于人工智能的一个经典评测标准:图灵测试,概括下来,在测试者不知道对面为机器还是人的情况下,向对方发问 ,如果机器的回答超过30%被误以为是人类回答的话,那么就说机器是智能的。

什么是人工神经网络,为什么要用他?
首先神经网络使用的是仿生学,人工神经网络的初衷和目的就是使得计算机像人脑一样“思考”,那硬件和软件的开发就应该仿照人类大脑来做,生物学,计算机学大佬们就想到了给机器按上一个神经元网络,但由于人类本身还没把自己的大脑搞个明白,所以人工智能尚处于一个半吊子状态,他只有人类一部分的智商而已。就目前而言,计算机远远赶不上人类思考的能力,而人类彻底研究明白大脑的那一天就是人工智能真正超越人类的一天(可怕哟)。

区别:

  • 人类的神经网络系统:从出生那一天,神经元就已经存在了,只是连接的方式及其简单,稀疏而已,当你睁开眼睛的那一刻,你看到的爸爸,妈妈的脸,视觉系统就会触发大脑的部分神经元开始连接,这个连接简而言之就是,脸->爸妈(当然实际情况传输层次更多更复杂),以后当你再看到爸妈的脸,就会顺着这条已存在的连接传递(中间也是多层的),一下就认出了爸爸妈妈。

  • 机器的神经网络系统:同样是人脸识别来看,机器先读取人脸,然后转换为二进制文件,将数据交给输入层,输入层传输到隐藏层,这时候会选择第一层部分的神经元,进行激活,神经元会根据给定的特征做一些参数调整,每一个神经元又选择下一层的几个神经元把自己处理好的数据传给他们,以此类推,直到输出层,给出一个“答案”,使用优化函数(如梯度下降算法)对比实际值的差距,比如把爸爸认成了妈妈,产生了这种差距后神经网络就要做一个重要的事情——反向传递,这是人类神经元所不需要的工作,将误差信息原路返回,修改刚刚路过的神经元,调整一些参数(权重),然后反反复复上述所有操作,最后得到接近正确答案的模型,算是学习结束,这时候再输入其他新数值一下就能得出结果了。这就是学习的过程!

结合上面两点来看,这就是为什么人只要看见一次就能记住的脸所对应的人,而机器只要发现脸变胖了,变黑了,就需要反向传递修改一些参数,记住胖脸和黑脸也是这个人,人识别人脸只需要部分特征数据即可,机器识别人脸则需要大量的特征数据。

最后需要知道一点是:机器学习的识别能力是来自大概率事件,只能做到某张图百分之多少是谁,这是指像素点落在某个范围的概率,那就确认是他本人,故而一些噪点(干扰项)落在别的范围,由于概率小,这些神经元在识别过程中会被直接忽略——dropout

安装TensorFlow

说道深度学习框架,第一反应就是Google的TensorFlow,就是围棋大神AlphaGo的前身。

ubuntu安装

安装python3

sudo apt-get install python3-pip python3-dev python-virtualenv

构建虚拟环境

virtualenv --system-site-packages -p python3 ~/tensorflow

source ~/tensorflow/bin/activate

source过后bash环境会有所变化,前方多个括号虚拟目录名,表示在虚拟环境下运行

这里写图片描述

安装TensorFlow 1.5

pip3 install tensorflow==1.5.0

注意:就安装1.5.0版本,默认的最新版(1.6)安装后,import tensorflow会报内存溢出错误,目前没有找到解决方案。

测试:

python3

import tensorflow

如果python3的解释器不报错就是安装成功了。

第一个案例

新建一个py文件:

import tensorflow as tf
import numpy as np

x = np.random.rand(100).astype(np.float32)
y = x*311.3+2.2

w = tf.Variable(tf.random_uniform([1],0.0,4.0))
b = tf.Variable(tf.zeros([1]))

y_pre = w*x+b

loss = tf.reduce_mean(tf.square(y_pre-y))
opt = tf.train.GradientDescentOptimizer(0.1)
train = opt.minimize(loss)

init = tf.initialize_all_variables()

session = tf.Session()

session.run(init)

for step in range(10000):
    session.run(train)
    if step % 100==0:
        print step,session.run(w),session.run(b)

以上python代码是对TensorFlow使用的一个简单例子,实现:求一次函数系数k和偏量b。

如果是人类实现的话,则是采用待定系数法。

机器学习如下:

首先使用numpy制造一些有关系的数字,产生随机的x,然后模拟一个y=kx+b,产生一些y变量,搞出一批(x,y)集合

tf.Variable的作用是给定两个变量并给出初始值,其实就是k与b的初始值,接下来就是让TensorFlow去“猜”k与b是多少,所谓的“猜”就是一个学习过程。

y_pre = w*x+b是给出了函数的基本类型:线性函数,事实上后面学习卷积神经网络之后都不需要给出这样的基本函数类型,而是让机器自己发现。

loss = tf.reduce_mean(tf.square(y_pre-y))
opt = tf.train.GradientDescentOptimizer(0.1)
train = opt.minimize(loss)

上面三段代码非常重要,是学习优化的规则,此处使用的是梯度下降优化算法:
loss = (真实值-输出值)^2,loss越小说明梯度越小,则当前机器学习的数值越接近预期值,即我们所给出的y = x*311.3+2.2

最后是要初始化所有提供给神经网络的输入值(变量),然后获取到session,这个session是指机器学习的一个状态,通过他可以获得当前机器学习已经算出的k,b是多少了。根据k,b值来判断是否需要继续学习。当k,b已经为想要的值时可以停止学习了。session.run放在for循环中,训练循环越多则越接近预期值。

这里写图片描述


推荐阅读
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 2020年9月15日,Oracle正式发布了最新的JDK 15版本。本次更新带来了许多新特性,包括隐藏类、EdDSA签名算法、模式匹配、记录类、封闭类和文本块等。 ... [详细]
  • 本文介绍如何使用OpenCV和线性支持向量机(SVM)模型来开发一个简单的人脸识别系统,特别关注在只有一个用户数据集时的处理方法。 ... [详细]
  • 用阿里云的免费 SSL 证书让网站从 HTTP 换成 HTTPS
    HTTP协议是不加密传输数据的,也就是用户跟你的网站之间传递数据有可能在途中被截获,破解传递的真实内容,所以使用不加密的HTTP的网站是不 ... [详细]
  • 本文将详细介绍如何注册码云账号、配置SSH公钥、安装必要的开发工具,并逐步讲解如何下载、编译 HarmonyOS 2.0 源码。通过本文,您将能够顺利完成 HarmonyOS 2.0 的环境搭建和源码编译。 ... [详细]
  • 本文将详细介绍如何在Mac上安装Jupyter Notebook,并提供一些常见的问题解决方法。通过这些步骤,您将能够顺利地在Mac上运行Jupyter Notebook。 ... [详细]
  • 大类|电阻器_使用Requests、Etree、BeautifulSoup、Pandas和Path库进行数据抓取与处理 | 将指定区域内容保存为HTML和Excel格式
    大类|电阻器_使用Requests、Etree、BeautifulSoup、Pandas和Path库进行数据抓取与处理 | 将指定区域内容保存为HTML和Excel格式 ... [详细]
  • Linux系统中权限修改命令详解:chmod使用方法与技巧
    在Linux系统中,`chmod`命令用于修改文件和目录的访问权限。文件和目录的访问控制由其所有权和权限设置决定。本文将详细介绍`chmod`命令的使用方法和技巧,帮助用户更好地管理和控制文件系统的安全性。 ... [详细]
  • 在 CentOS 7 系统中安装 Scrapy 时遇到了一些挑战。尽管 Scrapy 在 Ubuntu 上安装简便,但在 CentOS 7 上需要额外的配置和步骤。本文总结了常见问题及其解决方案,帮助用户顺利安装并使用 Scrapy 进行网络爬虫开发。 ... [详细]
  • 在Ubuntu系统中安装Android SDK的详细步骤及解决“Failed to fetch URL https://dlssl.google.com/”错误的方法
    在Ubuntu 11.10 x64系统中安装Android SDK的详细步骤,包括配置环境变量和解决“Failed to fetch URL https://dlssl.google.com/”错误的方法。本文详细介绍了如何在该系统上顺利安装并配置Android SDK,确保开发环境的稳定性和高效性。此外,还提供了解决网络连接问题的实用技巧,帮助用户克服常见的安装障碍。 ... [详细]
  • 在开发过程中,我最初也依赖于功能全面但操作繁琐的集成开发环境(IDE),如Borland Delphi 和 Microsoft Visual Studio。然而,随着对高效开发的追求,我逐渐转向了更加轻量级和灵活的工具组合。通过 CLIfe,我构建了一个高度定制化的开发环境,不仅提高了代码编写效率,还简化了项目管理流程。这一配置结合了多种强大的命令行工具和插件,使我在日常开发中能够更加得心应手。 ... [详细]
  • 在重新安装Ubuntu并配置Django和PyCharm后,忘记测试MySQL连接,导致在后续配置过程中遇到错误:ERROR 2003 (HY000) - 无法连接到本地服务器 ‘127.0.0.1’ (111)。本文将详细介绍该错误的原因及解决步骤,帮助用户快速恢复MySQL服务的正常运行。我们将从检查网络配置、验证MySQL服务状态、配置防火墙规则等方面入手,提供全面的故障排除指南。 ... [详细]
  • Netty框架中运用Protobuf实现高效通信协议
    在Netty框架中,通过引入Protobuf来实现高效的通信协议。为了使用Protobuf,需要先准备好环境,包括下载并安装Protobuf的代码生成器`protoc`以及相应的源码包。具体资源可从官方下载页面获取,确保版本兼容性以充分发挥其性能优势。此外,配置好开发环境后,可以通过定义`.proto`文件来自动生成Java类,从而简化数据序列化和反序列化的操作,提高通信效率。 ... [详细]
  • 利用树莓派畅享落网电台音乐体验
    最近重新拾起了闲置已久的树莓派,这台小巧的开发板已经沉寂了半年多。上个月闲暇时间较多,我决定将其重新启用。恰逢落网电台进行了改版,回忆起之前在树莓派论坛上看到有人用它来播放豆瓣音乐,便萌生了同样的想法。通过一番调试,终于实现了在树莓派上流畅播放落网电台音乐的功能,带来了全新的音乐享受体验。 ... [详细]
  • 深度森林算法解析:特征选择与确定能力分析
    本文深入探讨了深度森林算法在特征选择与确定方面的能力。提出了一种名为EncoderForest(简称eForest)的创新方法,作为首个基于决策树的编码器模型,它在处理高维数据时展现出卓越的性能,为特征选择提供了新的视角和工具。 ... [详细]
author-avatar
娜是相当滴好4
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有