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

TensorFlow入门上

前置准备在阅读本文之前,请确定你已经了解了神经网络的基本结构以及前向传播、后向传播的基本原理,如果尚未了解,可以查看下文。神经网络初探​chrer.com也可以直接在我博客阅读Te

前置准备

在阅读本文之前,请确定你已经了解了神经网络的基本结构以及前向传播、后向传播的基本原理,如果尚未了解,可以查看下文。

神经网络初探chrer.com《TensorFlow入门-上》

也可以直接在我博客阅读

TensorFlow入门-上chrer.com《TensorFlow入门-上》

什么是TensorFlow?

TensorFlow是
谷歌基于DistBelief进行研发的第二代
人工智能
学习系统,其命名来源于本身的运行原理。Tensor(张量)意味着N维数组,Flow(流)意味着基于数据流图的计算,TensorFlow为张量从流图的一端流动到另一端计算过程。TensorFlow是将复杂的数据结构传输至人工智能神经网中进行分析和处理过程的系统。

TensorFlow可被用于
语音识别或
图像识别等多项机器学习和深度学习领域,对2011年开发的深度学习基础架构DistBelief进行了各方面的改进,它可在小到一部智能手机、大到数千台数据中心服务器的各种设备上运行。TensorFlow将完全开源,任何人都可以用。

安装

需要先确定哪种类型的TensorFlow:

  • 仅支持CPU运算版本:如果电脑的系统没有 NVIDIA®的GPU,那么必须安装这个版本。这个版本的TensorFlow安装非常简单(安装仅需一个命令,5到10分钟),所以即使系统中有满足要求的NVIDIA® GPU官方还是建议在学习阶段安装这个版本。
  • 支持GPU运算的版本:TensorFlow程序在GPU下运行比在CPU下运行明显快很多。如果系统中包含 NVIDIA®的GPU满足下一个小节所示的条件并且程序对性能要求很高,建议安装此版本。

我是在windows平台下安装的CPU版本的TensorFlow,建议初学者安装该版本。

1.安装Python 3.5和pip【可以通过安装Anaconda 3同时获得】;

2.设置环境变量;

3.一键安装(CPU版):

pip install --upgrade --ignore-installed tensorflow

测试

安装之后可以测试是否安装成功,可以编写以下代码(功能是进行基本的张量加法):

import tensorflow as tf
a= tf.constant([1.0,2.0],name="a")
b= tf.constant([2.0,3.0],name="b")
result = a+b
sess= tf.Session()
print(sess.run(result))

如果安装成功,会显示

[3. 5.]

基本概念介绍

TensorFlow由Tensor和Flow组成,Tensor是张量的含义,在这里可以理解为多维数组,Flow是“流”,张量像“流”一样相互流动和转化,形成计算模型。

计算图

Tensorflow是一个通过计算图的形式来表述计算的编程系统,计算图也叫数据流图,可以把计算图看做是一种有向图,Tensorflow中的每一个计算都是计算图上的一个节点,而节点之间的边描述了计算之间的依赖关系。

《TensorFlow入门-上》

TensorFlow中有一个默认的计算图,它会自动将定义的计算转化为该计算图中的节点,下面代码体现了如何查看默认计算图:

import tensorflow as tf
print(tf.get_default_graph)

下面展现如何在不同计算图上定义和使用变量:

import tensorflow as tf
g1 = tf.Graph()
with gl.as_default():
#在计算图q1中定义变量"v",并设置初始值为0.
v= tf.get variable (
"v", initializer=tf.zeros initializer (shape=[1]))
g2 = tf.Graph ()
with q2.as default ():
#在计算图q2中定义变量"v",并设置初始值为1.
v= tf.get variable (
"v", initializer=tf.ones initializer (shape=[1]))
#在计算图c1中读取变量"v"的取值。
with tf.Session(graph=g1) as sess:
tf.initialize all variables ().run()
# :#在计算图q1中,变量"v"的取值应该为0,所以下面这行会输出[0.]
with tf.variable_scope("",reuse=True):
print (sess.run (tf.get variable ("v")))
#在计算图g2中读取变量"v"的取值。
with tf. Session (graph=g2) as sess:
tf.initialize all variables ().run ()
#在计算图q2中,变量"v"的取值应该为1,所以下面这行会输出[1.]。
with tf. variable scope ("", reuse=True):
print (sess.run (tf.get variable ("y")))

张量

tensorflow中的所有数据如图片、语音等都是以张量这种数据结构的形式表示的。张量是一种组合类型的数据类型,表示为一个多维数组,通用的表示形式为 ***[T1,T2,T3,…Tn] ,其中 *T 可以是在tensorflow中指定类型的单个数字,也可以是一个矩阵。

张量的维数又叫张量的阶,是张量维数的一个数量描述。如下分别表示0维、1维、2维和3维的张量:

1 #维度为0的标量
[1,2,3] #维度为1,一维向量
[[1,2],[3,4]] #维度为2, 二维矩阵
[[[1,2],[3,4]],[[1,2],[3,4]]] #维度为3,3维空间矩阵

维度要看张量的最左边有多少个左中括号,有n个,则这个张量就是n维张量

张量有三个重要的属性——名字、维数和数据类型,如下代码:

import tensorflow as tf
# tf.constant是一个计算,这个计算的结果为一个张量,保存在变量a中。
a = tf.constant ([1.0, 2.0], name="a")
b= tf.constant ([2.0, 3.01, name="b")
result = tf.add (a, b, name="add")
print(result)
# 输出:Tensor ("add:0", shape=(2,), dtype=float32)

张量和计算图上的节点时对应的,张量可以使用“node:src_output”来表示,如上文中的“add:0”。表示计算节点add中的第一个输出(从0开始计数)

会话

TensorFlow使用计算图表示计算过程,它是依据各个操作之间的依赖关系生成的。这是一个底层的编程模型,你需要先定义数据流图,然后创建一个 TensorFlow会话以在多个本地或远程的设备上运行流图的各个部分。

构造阶段完成后, 才能启动图。启动图的第一步是创建一个 Session 对象, 如果无任何创建参数, 会话构造器将启动默认图。会话会管理TensorFlow程序运行时的所有资源。当所有计算完成之后需要关闭会话来帮助系统回收资源,否则就可能出现资源泄露的问题。

TensorFlow中使用会话的模式一般有两种:

1、需要明确调用会话生成函数和关闭会话函数。

# 创建一个会话。
sess = tf.Session()
# 使用会话得到之前计算的结果。
sess.run(...)
# 关闭会话使得本次运行中使用到的资源可以被释放。
sess.close()

例子:

import tensorflow as tf
#使用张量记录中间结果
a = tf.constant([1.0, 2.0], name="a")
b = tf.constant([2.0, 3.0], name="b")
result = a + b
# 创建一个会话。
sess = tf.Session()
# 使用会话得到之前计算的结果。
print(sess.run(result))
# 关闭会话使得本次运行中使用到的资源可以被释放。
sess.close()

输出:

[ 3. 5.]

使用这种模式时,在所有计算完成之后,需要明确调用Session.close函数来关闭会话释放资源。然而,当程序因为异常而退出时,关闭会话的函数可能就不会被执行从而导致资源泄露。

所以TensorFlow可以通过Python的上下文管理器来使用会话。

2、通过Python的上下文管理器来使用会话。

#创建一个会话,并通过Python中的上下文管理器来管理
with tf.Session() as sess:
#使用这个会话来计算关心的结果
sess.run(...)
#不再需要调用“Session.close()”函数来关闭会话,当上下文退出时会话关闭和资源释放也会自动完成。

例子:

import tensorflow as tf
#使用张量记录中间结果
a = tf.constant([1.0, 2.0], name="a")
b = tf.constant([2.0, 3.0], name="b")
result = a + b
with tf.Session() as sess:
print(sess.run(result))123456789

通过Python上下文管理器的机制,只要将所有的计算放在with的内部就可以。当上下文管理器退出时就会自动释放所有资源。这样既解决了因为异常退出时资源释放的问题,同时也解决了忘记调用Session.close函数而产生的资源泄露。

变量

TensorFlow变量(Variables)是在程序中表示共享、持久状态的最佳方式。

通过tf.Variable类操作变量。tf.Variable表示值可以被操作改变的张量。跟tf.Tensor对象不一样,tf.Variable存在于单个session.run调用的上下文之外。

在内部,tf.Variable存储一个持久张量,允许读取和修改张量的值。这些修改是跨tf.Session可见的,所以不同的工作节点可以看到相同的值tf.Variable

创建变量的最好方法是调用tf.get_variable功能。此功能要求您指定变量的名称。此名称将被其他副本用于访问相同变量,以及在检查点和导出模型时命名此变量的值。tf.get_variable还允许您重复使用先前创建的同名变量,从而可以轻松定义重复使用图层的模型。

tf.get_variable来创建一个变量,只需提供名称和形状

my_variable = tf.get_variable("my_variable", [1, 2, 3])

这将创建一个名为”my_variable”的变量,它是一个带有形状[1, 2, 3]的3维张量。这个变量默认的dtypetf.float32,其初始值将通过tf.glorot_uniform_initializer随机化。

您可以选择指定dtype和初始化程序tf.get_variable。例如:

my_int_variable = tf.get_variable("my_int_variable", [1, 2, 3], dtype=tf.int32,
initializer=tf.zeros_initializer)

TensorFlow提供了许多方便的初始化程序。或者,您可以初始化一个tf.Variable为具有tf.Tensor的值。例如:

other_variable = tf.get_variable("other_variable", dtype=tf.int32,
initializer=tf.constant([23, 42]))

请注意,当初始化器是一个tf.Tensor,你不应该指定变量的形状,因为用来初始化的张量的形状将被复用。

变量集合

因为TensorFlow程序中不连接的部分之间可能需要创建变量,所以用单一的方法来访问所有的变量是有用的。出于这个原因,TensorFlow提供 collections(集合),它们被命名为张量或其他对象的列表,例如tf.Variable实例。

默认情况下每个tf.Variable被放置在以下两个集合中:tf.GraphKeys.GLOBAL_VARIABLES—可以在多个设备上共享的变量,tf.GraphKeys.TRAINABLE_VARIABLES— TensorFlow将计算梯度的变量。

如果你不想要一个变量是可训练的,把它添加到tf.GraphKeys.LOCAL_VARIABLES集合。例如,以下代码片段演示了如何添加一个名为my_local的变量到这个集合:

my_local = tf.get_variable("my_local", shape=(),
collections=[tf.GraphKeys.LOCAL_VARIABLES])

或者,您可以指定trainable=False作为tf.get_variable的参数:

my_non_trainable = tf.get_variable("my_non_trainable",
shape=(),
trainable=False)

您也可以使用自己的集合。任何字符串都是有效的集合名称,并且不需要显式创建集合。在创建变量之后向变量添加一个变量(或任何其他对象),调用tf.add_to_collection。例如,下面的代码添加一个名为my_local的现有变量到一个名为my_collection_name的集合:

tf.add_to_collection("my_collection_name", my_local)

为了检索你已经放置在集合中的所有变量(或其他对象)的列表,你可以使用:

tf.get_collection("my_collection_name")

查看更多

所有的文章都会在我的博客和我的知乎专栏同步进行更新,欢迎阅读

  • 我的博客
  • 知乎专栏

推荐阅读
  • 在Windows系统中安装TensorFlow GPU版的详细指南与常见问题解决
    在Windows系统中安装TensorFlow GPU版是许多深度学习初学者面临的挑战。本文详细介绍了安装过程中的每一个步骤,并针对常见的问题提供了有效的解决方案。通过本文的指导,读者可以顺利地完成安装并避免常见的陷阱。 ... [详细]
  • 精选10款Python框架助力并行与分布式机器学习
    随着神经网络模型的不断深化和复杂化,训练这些模型变得愈发具有挑战性,不仅需要处理大量的权重,还必须克服内存限制等问题。本文将介绍10款优秀的Python框架,帮助开发者高效地实现分布式和并行化的深度学习模型训练。 ... [详细]
  • 本文将深入探讨 Unreal Engine 4 (UE4) 中的距离场技术,包括其原理、实现细节以及在渲染中的应用。距离场技术在现代游戏引擎中用于提高光照和阴影的效果,尤其是在处理复杂几何形状时。文章将结合具体代码示例,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 本文介绍了如何使用 Google Colab 的免费 GPU 资源进行深度学习应用开发。Google Colab 是一个无需配置即可使用的云端 Jupyter 笔记本环境,支持多种深度学习框架,并且提供免费的 GPU 计算资源。 ... [详细]
  • 在Conda环境中高效配置并安装PyTorch和TensorFlow GPU版的方法如下:首先,创建一个新的Conda环境以避免与基础环境发生冲突,例如使用 `conda create -n pytorch_gpu python=3.7` 命令。接着,激活该环境,确保所有依赖项都正确安装。此外,建议在安装过程中指定CUDA版本,以确保与GPU兼容性。通过这些步骤,可以确保PyTorch和TensorFlow GPU版的顺利安装和运行。 ... [详细]
  • 通过使用CIFAR-10数据集,本文详细介绍了如何快速掌握Mixup数据增强技术,并展示了该方法在图像分类任务中的显著效果。实验结果表明,Mixup能够有效提高模型的泛化能力和分类精度,为图像识别领域的研究提供了有价值的参考。 ... [详细]
  • 在Windows命令行中,通过Conda工具可以高效地管理和操作虚拟环境。具体步骤包括:1. 列出现有虚拟环境:`conda env list`;2. 创建新虚拟环境:`conda create --name 环境名`;3. 删除虚拟环境:`conda env remove --name 环境名`。这些命令不仅简化了环境管理流程,还提高了开发效率。此外,Conda还支持环境文件导出和导入,方便在不同机器间迁移配置。 ... [详细]
  • 本文提供了PyTorch框架中常用的预训练模型的下载链接及详细使用指南,涵盖ResNet、Inception、DenseNet、AlexNet、VGGNet等六大分类模型。每种模型的预训练参数均经过精心调优,适用于多种计算机视觉任务。文章不仅介绍了模型的下载方式,还详细说明了如何在实际项目中高效地加载和使用这些模型,为开发者提供全面的技术支持。 ... [详细]
  • 本文详细介绍了在Windows操作系统上使用Python 3.8.5编译支持CUDA 11和cuDNN 8.0.2的TensorFlow 2.3的步骤。文章不仅提供了详细的编译指南,还分享了编译后的文件下载链接,方便用户快速获取所需资源。此外,文中还涵盖了常见的编译问题及其解决方案,确保用户能够顺利进行编译和安装。 ... [详细]
  • 如何在Linux系统中部署TensorFlow的详细指南
    本文详细介绍了在Linux系统中部署TensorFlow的过程。作者基于北京大学曹建教授的MOOC课程进行学习,但由于课程内容较旧,环境配置方面遇到了不少挑战。经过多次尝试,最终成功解决了这些问题,并总结了一套详细的安装指南,帮助初学者快速上手TensorFlow。 ... [详细]
  • Flutter 核心技术与混合开发模式深入解析
    本文深入探讨了 Flutter 的核心技术,特别是其混合开发模式,包括统一管理模式和三端分离模式,以及混合栈原理。通过对比不同模式的优缺点,帮助开发者选择最适合项目的混合开发策略。 ... [详细]
  • 【图像分类实战】利用DenseNet在PyTorch中实现秃头识别
    本文详细介绍了如何使用DenseNet模型在PyTorch框架下实现秃头识别。首先,文章概述了项目所需的库和全局参数设置。接着,对图像进行预处理并读取数据集。随后,构建并配置DenseNet模型,设置训练和验证流程。最后,通过测试阶段验证模型性能,并提供了完整的代码实现。本文不仅涵盖了技术细节,还提供了实用的操作指南,适合初学者和有经验的研究人员参考。 ... [详细]
  • 在Windows环境下离线安装PyTorch GPU版时,首先需确认系统配置,例如本文作者使用的是Win8、CUDA 8.0和Python 3.6.5。用户应根据自身Python和CUDA版本,在PyTorch官网查找并下载相应的.whl文件。此外,建议检查系统环境变量设置,确保CUDA路径正确配置,以避免安装过程中可能出现的兼容性问题。 ... [详细]
  • 深入解析经典卷积神经网络及其实现代码
    深入解析经典卷积神经网络及其实现代码 ... [详细]
  • 深度森林算法解析:特征选择与确定能力分析
    本文深入探讨了深度森林算法在特征选择与确定方面的能力。提出了一种名为EncoderForest(简称eForest)的创新方法,作为首个基于决策树的编码器模型,它在处理高维数据时展现出卓越的性能,为特征选择提供了新的视角和工具。 ... [详细]
author-avatar
George
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有