深度学习之 TensorFlow(二):TensorFlow 基础知识

简介: 1.TensorFlow 系统架构:  分为设备层和网络层、数据操作层、图计算层、API 层、应用层。其中设备层和网络层、数据操作层、图计算层是 TensorFlow 的核心层。 2.TensorFlow 设计理念: (1)将图的定义和图的运行完全分开。

1.TensorFlow 系统架构:

  分为设备层和网络层、数据操作层、图计算层、API 层、应用层。其中设备层和网络层、数据操作层、图计算层是 TensorFlow 的核心层。

 

2.TensorFlow 设计理念:

 (1)将图的定义和图的运行完全分开。TensorFlow 完全采用符号式编程。

    符号式计算一般是先定义各种变量,然后建立一个数据流图,在数据流图中规定各个变量之间的计算关系,最后需要对数据流图进行编译,此时的数据流图还是一个空壳,里面没有任何实际数据,只有把需要的输入放进去后,才能在整个模型中形成数据流,从而形成输出值。

如下图所示:定义了一个操作,但实际上并没有运行。

 (2) TensorFlow 中涉及的运算都要放在图中,而图的运行只发生在会话(session)中。开启会话后,就可以用数据去填充节点,进行运算;关闭会话则不能进行计算。会话提供了操作运行和 Tensor 求值的环境。

一个简单的例子:

 

3. TensorFlow 各个概念:

 (1)边:TensorFlow 的边有两种连接关系:数据依赖(实线表示)和控制依赖(虚线表示)。实现边表示数据依赖,代表数据,即张量。任意维度的数据统称为张量。虚线边称为控制依赖,可以用于控制操作的运行,这类边上没有数据流过,但源节点必须在目的节点开始执行前完成执行。

 (2)节点:节点代表一个操作,一般用来表示施加的数学运算。

 (3)图:把操作任务描述成有向无环图。创建图使用 tf.constant() 方法:

a = tf.constant([1.0,2.0])

 (4)会话:启动图的第一步是创建一个 Session 对象。会话提供在图中执行操作的一些方法。使用 tf.Session() 方法创建对象,调用 Session 对象的 run()方法来执行图:

with tf.Session() as sess:
    result = sess.run([product])
    print(result)

 (5)设备:设备是指一块可以用来运算并且拥有自己的地址空间的硬件。方法:tf.device()

 (6)变量:变量是一种特殊的数据,它在图中有固定的位置,不向普通张量那样可以流动。使用 tf.Variable() 构造函数来创建变量,并且该构造函数需要一个初始值,初始值的形状和类型决定了这个变量的形状和类型。

#创建一个变量,初始化为标量0
state = tf.Variable(0, name="counter")

 (7)内核:内核是能够运行在特定设备(如 CPU、GPU)上的一种对操作的实现。

 

4.TensorFlow 批标准化:

 批标准化(BN)是为了克服神经网络层数加深导致难以训练而诞生的。

 方法:批标准化一般用在非线性映射(激活函数)之前,对 x=Wu+b 做规划化,使结果(输出信号各个维度)的均值为0,方差为1。

 用法:在遇到神经网络收敛速度很慢火梯度爆炸等无法训练的情况下,都可以尝试用批标准化来解决。

 

5.神经元函数:

 (1)激活函数:激活函数运行时激活神经网络中某一部分神经元,将激活信息向后传入下一层的神经网络。介绍几个常用的激活函数。

  a.sigmoid 函数。sigmoid 将一个 real value 映射到 (0, 1) 的区间,这样可以用来做二分类。

使用方法如下:

a = tf.constant([[1.0,2.0], [1.0, 2.0], [1.0, 2.0]])
sess = tf.Session()
print(sess.run(tf.sigmoid(a))

 

  b.softmax 函数。softmax把一个 k 维的 real value 向量(a1, a2 a3, a4, ...)映射成一个(b1, b2, b3, b4, ...)其中bi 是一个0-1的常数,然后可以根据 bi 的大小来进行多分类的任务,如取权重最大的一维。

函数表达式:

 

其输出的是一个多维向量,不论有多少个分量,其和加都是1,每个向量的分量维度都是一个小于1的值,这也是与 sigmoid 函数的重要区别。

函数图像:

  c.relu 函数。relu 函数可以解决 sigmoid 函数梯度下降慢,消失的问题。

使用方法如下:

a = tf.constant([-1.0, 2.0])
with tf.Session() as sess:
    b = tf.nn.relu(a)
    print(sess.run(b))

  d.dropout 函数。一个神经元将以概率keep_prob 决定是否被抑制。如果被抑制,该神经元输出就为0;如果不被抑制,那么该神经元的输出值将被放大到原来的1/keep_prob 倍。(可以解决过拟合问题)。

使用方法如下:

a = tf.constant([[-1.0, 2.0, 3.0, 4.0]])
with tf.Sessin() as sess:
    b = tf.nn.dropout(a, 0.5, noise_shape=[1,4])
    print(sess.run(b))

 

 (2)卷积函数:卷积函数是构建神经网络的重要支架,是在一批图像上扫描的二维过滤器。这里简单介绍一下卷积函数的几个方法。

  a. 这个函数计算 N 维卷积的和。

tf.nn.convolution(input, filter, padding, strides=None, dilation_rate=None, name=None, data_format=None)

 

  b.这个函数的作用是对一个四维的输入数据 input 和四维的卷积核 filter 进行操作,然后对输入数据进行一个二维的卷积操作,最后得到卷积之后的结果。

tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None, name=None, name=None) 

 

  此外还有 tf.nn.depthwise_conv2d()tf.nn.separable_conv2d()  等方法,这里不再一一说明。

 

 (3)池化函数:在神经网络中,池化函数一般跟在卷积函数的下一层池化操作是利用一个矩阵窗口在张量上进行扫描,将每个矩阵窗口中的值通过取最大值或平均值来减少元素个数。每个池化操作的矩阵窗口大小是有 ksize 指定的,并且根据步长 strides 决定移动步长。

  a.计算池化区域中元素的平均值。

tf.nn.avg_pool(value, ksize, strides, padding, data_format='NHWC', name=None)

 

  b.计算池化区域中元素的最大值。

tf.nn.max_pool(value, ksize, strides, padding, data_format='NHWC', name=None)

 

 

6.模型的存储于加载

 (1)模型存储主要是建立一个 tf.train.Saver() 来保存变量,通过在 tf.train.Saver 对象上调用 Saver.save() 生成,并且制定保存的位置,一般模型的扩展名为 .ckpt。

saver.save(sess, ckpt_dir + "/model.ckpt", global_step=global_step)

 (2)加载模型可以用 saver.resotre 来进行模型的加载。

with tf.Session() as sess:
    tf.initialize_all_variables().run()
    
    ckpt = tf.train.get_checkpoint_state(ckpt_dir)
    if ckpt and ckpt.model_checkpoint_path:
        print(ckpt.model_checkpoint_path) 
        saver.restore(sess, ckpt.model_checkpoint_path) #加载所有的参数

 

 

PS: 一张图看懂拟合、过拟合和欠拟合。画的有点丑就是。。。

相关文章
|
27天前
|
机器学习/深度学习 TensorFlow 算法框架/工具
深度学习之格式转换笔记(三):keras(.hdf5)模型转TensorFlow(.pb) 转TensorRT(.uff)格式
将Keras训练好的.hdf5模型转换为TensorFlow的.pb模型,然后再转换为TensorRT支持的.uff格式,并提供了转换代码和测试步骤。
62 3
深度学习之格式转换笔记(三):keras(.hdf5)模型转TensorFlow(.pb) 转TensorRT(.uff)格式
|
11天前
|
机器学习/深度学习 人工智能 算法
【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型
车辆车型识别,使用Python作为主要编程语言,通过收集多种车辆车型图像数据集,然后基于TensorFlow搭建卷积网络算法模型,并对数据集进行训练,最后得到一个识别精度较高的模型文件。再基于Django搭建web网页端操作界面,实现用户上传一张车辆图片识别其类型。
34 0
【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型
|
2月前
|
机器学习/深度学习 人工智能 算法
鸟类识别系统Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+ResNet50算法模型+图像识别
鸟类识别系统。本系统采用Python作为主要开发语言,通过使用加利福利亚大学开源的200种鸟类图像作为数据集。使用TensorFlow搭建ResNet50卷积神经网络算法模型,然后进行模型的迭代训练,得到一个识别精度较高的模型,然后在保存为本地的H5格式文件。在使用Django开发Web网页端操作界面,实现用户上传一张鸟类图像,识别其名称。
104 12
鸟类识别系统Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+ResNet50算法模型+图像识别
|
24天前
|
机器学习/深度学习 人工智能 算法
【玉米病害识别】Python+卷积神经网络算法+人工智能+深度学习+计算机课设项目+TensorFlow+模型训练
玉米病害识别系统,本系统使用Python作为主要开发语言,通过收集了8种常见的玉米叶部病害图片数据集('矮花叶病', '健康', '灰斑病一般', '灰斑病严重', '锈病一般', '锈病严重', '叶斑病一般', '叶斑病严重'),然后基于TensorFlow搭建卷积神经网络算法模型,通过对数据集进行多轮迭代训练,最后得到一个识别精度较高的模型文件。再使用Django搭建Web网页操作平台,实现用户上传一张玉米病害图片识别其名称。
50 0
【玉米病害识别】Python+卷积神经网络算法+人工智能+深度学习+计算机课设项目+TensorFlow+模型训练
|
2月前
|
机器学习/深度学习 算法 TensorFlow
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
交通标志识别系统。本系统使用Python作为主要编程语言,在交通标志图像识别功能实现中,基于TensorFlow搭建卷积神经网络算法模型,通过对收集到的58种常见的交通标志图像作为数据集,进行迭代训练最后得到一个识别精度较高的模型文件,然后保存为本地的h5格式文件。再使用Django开发Web网页端操作界面,实现用户上传一张交通标志图片,识别其名称。
95 6
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
|
27天前
|
机器学习/深度学习 移动开发 TensorFlow
深度学习之格式转换笔记(四):Keras(.h5)模型转化为TensorFlow(.pb)模型
本文介绍了如何使用Python脚本将Keras模型转换为TensorFlow的.pb格式模型,包括加载模型、重命名输出节点和量化等步骤,以便在TensorFlow中进行部署和推理。
63 0
|
2月前
|
机器学习/深度学习 供应链 TensorFlow
深度学习实战营:TensorFlow+Python,打造你的数据驱动决策引擎
【9月更文挑战第13天】在数据爆炸时代,企业日益依赖精准分析进行决策。深度学习凭借其卓越的特征提取与模式识别能力,成为构建数据驱动决策引擎的关键技术。本项目通过TensorFlow和Python,利用LSTM构建零售业销量预测模型,优化库存管理和营销策略。首先确保安装TensorFlow,然后使用Keras API搭建模型,并通过训练、评估和部署流程,展示深度学习在数据驱动决策中的强大应用潜力,助力企业提升经营效率。
43 3
|
2月前
|
机器学习/深度学习 数据挖掘 TensorFlow
解锁Python数据分析新技能,TensorFlow&PyTorch双引擎驱动深度学习实战盛宴
在数据驱动时代,Python凭借简洁的语法和强大的库支持,成为数据分析与机器学习的首选语言。Pandas和NumPy是Python数据分析的基础,前者提供高效的数据处理工具,后者则支持科学计算。TensorFlow与PyTorch作为深度学习领域的两大框架,助力数据科学家构建复杂神经网络,挖掘数据深层价值。通过Python打下的坚实基础,结合TensorFlow和PyTorch的强大功能,我们能在数据科学领域探索无限可能,解决复杂问题并推动科研进步。
58 0
|
2月前
|
机器学习/深度学习 数据挖掘 TensorFlow
从数据小白到AI专家:Python数据分析与TensorFlow/PyTorch深度学习的蜕变之路
【9月更文挑战第10天】从数据新手成长为AI专家,需先掌握Python基础语法,并学会使用NumPy和Pandas进行数据分析。接着,通过Matplotlib和Seaborn实现数据可视化,最后利用TensorFlow或PyTorch探索深度学习。这一过程涉及从数据清洗、可视化到构建神经网络的多个步骤,每一步都需不断实践与学习。借助Python的强大功能及各类库的支持,你能逐步解锁数据的深层价值。
59 0
|
3月前
|
持续交付 测试技术 jenkins
JSF 邂逅持续集成,紧跟技术热点潮流,开启高效开发之旅,引发开发者强烈情感共鸣
【8月更文挑战第31天】在快速发展的软件开发领域,JavaServer Faces(JSF)这一强大的Java Web应用框架与持续集成(CI)结合,可显著提升开发效率及软件质量。持续集成通过频繁的代码集成及自动化构建测试,实现快速反馈、高质量代码、加强团队协作及简化部署流程。以Jenkins为例,配合Maven或Gradle,可轻松搭建JSF项目的CI环境,通过JUnit和Selenium编写自动化测试,确保每次构建的稳定性和正确性。
59 0