Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python人工智能 | 四.TensorFlow基础之Session、变量、传入值和激励函数

Python人工智能 | 四.TensorFlow基础之Session、变量、传入值和激励函数

作者头像
Eastmount
发布于 2021-12-02 13:31:14
发布于 2021-12-02 13:31:14
71400
代码可运行
举报
运行总次数:0
代码可运行

从本篇文章开始,作者正式开始讲解Python深度学习、神经网络及人工智能相关知识,希望您喜欢。

前一篇文章讲解了TensorFlow基础和一元直线预测的案例。本篇文章将详细介绍Session、变量、传入值和激励函数。主要结合作者之前的博客和"莫烦大神"的视频介绍,后面随着深入会讲解具体的项目及应用。

基础性文章,希望对您有所帮助,如果文章中存在错误或不足之处,还请海涵~同时自己也是人工智能的菜鸟,希望大家能与我在这一笔一划的博客中成长起来。

文章目录:

  • 一.tensor张量
  • 二.Session
  • 三.常量和变量
  • 四.placeholder传入值
  • 五.激励函数
  • 六.总结

代码下载地址:

  • https://github.com/eastmountyxz/ AI-for-TensorFlow
  • https://github.com/eastmountyxz/ AI-for-Keras

一.tensor张量

TensorFlow中文翻译是“向量飞舞”,这也是TensorFlow的基本含义。Tensorflow使用数据流图(data flow graphs)技术来进行数值计算。数据流图是一个有向图,使用节点(一般用圆形或方形描述,表示一个数学操作或数据输入的起点和数据输出的终点)和线(表示数字、矩阵或Tensor张量)来描述数学计算。

数据流图可以方便的将各个节点分配到不同的计算设备上完成异步并行计算,非常适合大规模的机器学习应用。如下图所示,通过Gradients不断学习改进我们的权重W和偏置b,从而提升准确度。

Tensor(张量)是tensorflow框架使用的基本数据结构,张量即多维数组,在python中可以理解为嵌套的多维列表。张量的维度称为阶,0阶张量又称为标量,1阶张量又称为向量,2阶张量又称为矩阵。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 0阶张量 标量
5
# 1阶张量 向量大小为3
[1., 2., 3.] 
# 2阶张量 2*3矩阵
[[1., 2., 3.], 
 [4., 5., 6.]]
# 3阶张量 大小为2*3*2
[[[1., 2.],[3., 4.],[5., 6.]], 
 [[7., 8.],[9., 10.],[11., 12.]]] 

代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# -*- coding: utf-8 -*-
import tensorflow as tf 

#定义变量
a = tf.constant([1, 2, 3], name="a")
b = tf.constant([[1, 2, 3],[4, 5, 6]])
print(a)
print(b)

#创造数组01
c = tf.zeros([2, 3])
d = tf.ones([2,3])
print(c)
print(d)

#随机生成一个正态分布
e = tf.random.normal([5,3])
print(e)

输出结果如下图所示:

二.Session

Tensor实际上就是一个多维数组,是TensorFlow的主要数据结构。它们在一个或多个由节点(nodes)和边(edges)组成的图(graphs)中流动。边代表的是tensors,节点代表的是对tensors的操作(operations)。tensors在图中从一个节点流向另一个节点,每次经过一个节点都接受一次操作。

此外,图必须在会话里被启动,会话将图的操作分发到CPU或GPU之类的设备上,同时提供执行操作(op)的方法,这些方法执行后,将产生的tensor返回。TensorFlow程序通常被组织成一个构建阶段和一个执行阶段:

  • 在构建阶段,op的执行步骤被描述成一个图
  • 在执行阶段,使用会话执行图中的op

比如,在构建阶段创建一个图来表示和训练神经网络,然后在执行阶段反复执行图中的训练op。TensorFlow中涉及的运算都要放在图中,而图的运行只发生在会话(session)中。开启会话后,就可以用数据去填充节点,并进行运算;关闭会话则不能进行计算。会话提供了操作运行和Tensor求值的环境。

下面举一个简单的例子。我们使用Session对象的run()方法来执行乘法操作,定义两个矩阵matrix1和matrix2,然后再Session中运行。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# -*- coding: utf-8 -*-
"""
Created on Sat Nov 30 16:38:31 2019
@author: Eastmount CSDN YXZ
"""

import tensorflow as tf

# 建立两个矩阵
matrix1 = tf.constant([[3,3]]) #常量 12列
matrix2 = tf.constant([[2],
                       [2]])  #常量 21列

# 矩阵乘法 matrix multiply 类似于numpy.dot()函数
product = tf.matmul(matrix1, matrix2)

# 两种利用Session会话控制的方法
# 方法一
sess = tf.Session()
output = sess.run(product) # 执行操作 每run一次TensorFlow才会执行操作
print(output)
sess.close() 

# 方法二
with tf.Session() as sess: # 打开Session并且赋值为sess 运行结束会自动close
    output = sess.run(product)
    print(output)

输出结果如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[[12]]
[[12]]

三.常量和变量

在TensorFlow中,使用tf.constant来创建常量。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 创建1*2矩阵常量
c1 = tf.constant([[1., 1.]]) 
# 创建2*1矩阵常量
c2 = tf.constant([[2.],[2.]]) 

在TensorFlow中,使用tf.Variable来创建变量。变量(Variable)是特殊的张量,它的值可以是一个任何类型和形状的张量。其中,变量的定义和Python中不太一样,比如state = tf.Variable(),TensorFlow必须要定义成一个变量,它才是一个真正的变量。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 创建一个0阶变量并初始化为0
state = tf.Variable(0, name='counter')

创建变量时,必须将一个张量作为初始值传入构造函数Variable(),TensorFlow提供了一系列操作符来初始化张量如tf.random_normal和tf.zeros。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 标准差为0.35的正态分布初始化一个形状(10,20)的变量
w = tf.Variable(tf.random_normal([10, 20], stddev=0.35), name="w")

接着实现一个案例,循环输出变量。该代码需要注意:

  • 定义变量一定要初始化,使用: global_variables_initializer() initialize_all_variables()
  • 定义Session时一定要使用sess.run(init)初始化,然后才能使用
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# -*- coding: utf-8 -*-
"""
Created on Sun Dec  1 16:52:18 2019
@author: Eastmount CSDN YXZ
"""
import tensorflow as tf

# 定义变量 初始值为0 变量名字为counter(用于计数)
state = tf.Variable(0, name='counter')
print(state.name)
print(state)

# 定义常量
one = tf.constant(1)
print(one)

# 新变量
result = tf.add(state, one)

# 更新: result变量加载到state中 state当前变量即为result
update = tf.assign(state, result)

# Tensorflow中需要初始化所有变量才能激活
init = tf.global_variables_initializer() # must have if define variable

# Session
with tf.Session() as sess:
    sess.run(init)
    # 三次循环更新变量
    for _ in range(3):
        sess.run(update)
        print(sess.run(state)) #直接输出state没用 需要run

循环最开始执行sess.run(update),此时的state会加1输出,接着继续执行两次输出2、3。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1
2
3

继续补充一个案例,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import tensorflow as tf

# 定义变量
a = tf.constant([5, 3], name='input_a')

# 计算
b = tf.reduce_prod(a, name='prod_b')
c = tf.reduce_sum(a, name='sum_c')
d = tf.add(b, c, name='add_d')

# Session
with tf.Session() as sess:
    print('a:', sess.run(a))
    print('b:', sess.run(b))
    print('c:', sess.run(c))
    print('d:', sess.run(d))

输出结果如下图所示,节点a接收了一个tensor,该tensor从节点a流出后,分别流向了节点b和c,节点b执行的是prod操作5*3,节点c执行的是sum操作5+3。当tensor从节点b流出时变成了15,从节点c流出时变成了8。此时,2个tensor又同时流入节点d,接受的是add操作15+8,最后从节点d流出的tensor就是23。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
a: [5 3]
b: 15
c: 8
d: 23

tensor是在graph中流动的过程如下图所示。当我们把图中的一个节点传递给Session.run( )的时候,实际上就是在对TensorFlow说“Hi,我想要这个node的输出,请帮我运行相应的操作来得到它,谢谢!” 这时,Session会找到这个node所依赖的所有操作,然后按照从前到后的顺序依次进行计算,直到得出你所需要的结果。

四.placeholder传入值

placeholder称为传入值或占位符。上述示例在计算图中引入了张量,以常量或变量的形式存储,Tensorflow中还提供了另外一种机制,即先定义占位符,等到真正执行的时候再用具体值去填充或更新占位符的值。

TensorFlow使用tf.placeholder()创建占位符,开始先hold住变量,之后会从外界传入进来,把placeholder值填充进去,Session.run的feed_dict为参数填充值。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# -*- coding: utf-8 -*-
"""
Created on Sun Dec  1 18:21:29 2019
@author: Eastmount CSDN YXZ
"""

import tensorflow as tf

# 传入值 给定type
input1 = tf.placeholder(tf.float32)
input2 = tf.placeholder(tf.float32)

# 输出 乘法运算
output = tf.multiply(input1, input2)

# Session
with tf.Session() as sess:
    # placeholder需要传入值,在session.run时传入字典类型
    print(sess.run(output, feed_dict={input1:[7.], input2:[2.0]})) 

输出结果如下所示,如果你要用placeholder,就意味着你想在运行结果的时候在给输入值。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[14.]

五.激励函数

激励函数(activation function)会让某一部分神经元先激活,然后把激活的信息传递给后面一层的神经系统中。比如,某些神经元看到猫的图片,它会对猫的眼睛特别感兴趣,那当神经元看到猫的眼睛时,它就被激励了,它的数值就会被提高。

激励函数相当于一个过滤器或激励器,它把特有的信息或特征激活,常见的激活函数包括softplus、sigmoid、relu、softmax、elu、tanh等。对于隐藏层,我们可以使用relu、tanh、softplus等非线性关系;对于分类问题,我们可以使用sigmoid(值越小越接近于0,值越大越接近于1)、softmax函数,对每个类求概率,最后以最大的概率作为结果;对于回归问题,可以使用线性函数(linear function)来实验。

常见的激励函数参考维基百科:

  • https://en.wikipedia.org/wiki/Activation_function

TensorFlow的结构如下,输入值input经过隐藏层layer1和layer2,然后有一个预测值predictions。cross_entropy是计算跟真实值的差距。

打开layer2,可以看到激励函数在这里面。layer1传进来的值进行加工,加工完之后layer2要输出值Wx_plus_b,该值经过一个激励函数relu,某些部分被激励,然后继续传递到predictions作为预测值。

也可以在google或baidu搜索“TensorFlow activation”,激励函数显示如下图所示:

  • http://www.tensorfly.cn/tfdoc/ api_docs/python/nn.html

下面补充一个简单的激励函数例子,后续我们会结合具体的案例来运用激励函数解决实际的问题。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import tensorflow as tf

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

# 激励函数
with tf.Session() as sess:
    b = tf.nn.relu(a)
    print(sess.run(b))
    
    c = tf.sigmoid(a)
    print(sess.run(c))

输出结果为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[0. 2.]
[0.26894143 0.880797  ]

其中Sigmoid函数为:

这是传统神经网络中最常用的激活函数之一,优点是它输出映射在(0,1)内,单调连续,非常适合用作输出层,并且求导比较容易。缺点是具有软饱和性,一旦输入落入饱和区,一阶导数就变得接近于0,很容易产生梯度消失。

relu函数是目前用的最多也是最受欢迎的激活函数。公式和函数图像如下:

由图可知,relu在x<0时是硬饱和,由于当x>0时一阶导数为1。所以,relu函数在x>0时可以保持梯度不衰减,从而缓解梯度消失问题,还可以更快的去收敛。但随着训练进行,部分输入会落到硬饱和区,导致对应的权重无法更新。

六.总结

写到这里,这篇基础性的TensorFlow文章就讲述完毕。这是非常基础的一篇深度学习文章,同时文章中存在错误或不足之处,还请海涵~

参考文献,感谢各位大神的文章和视频,推荐大家跟着莫烦老师学习,他是我人工智能的入门老师。

  • [1] 神经网络和机器学习基础入门分享 - 作者的文章
  • [2] 斯坦福机器学习视频NG教授: https://class.coursera.org/ml/class/index
  • [3] 书籍《游戏开发中的人工智能》
  • [4] 网易云莫烦老师视频(强推): https://study.163.com/course/courseLearn.htm?courseId=1003209007
  • [5] 神经网络激励函数 - deeplearning
  • [6] tensorflow架构 - NoMorningstar
  • [7] 《TensorFlow2.0》低阶 api 入门 - GumKey
  • [8]TensorFlow之基础知识 - kk123k
  • [9] Tensorflow基础知识梳理- sinat_36190649
  • [10] 深度学习(二):TensorFlow 基础知识 - 希希里之海
  • [11] tensorflow基础概念 - lusic01
  • [12] tensorflow:激活函数(Activation Function) - haoji007
  • [13] AI => Tensorflow2.0语法 - 张量&基本函数(一)
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-06-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 娜璋AI安全之家 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
人工智能python的tensorflow基础
import tensorflow as tf matrix1=tf.constant([[3,3]]) matrix2=tf.constant([[2], [2]]) product=tf.matmul(matrix1,matrix2) with tf.Session() as sess:#打开Session以sess命名,不用管关不关Session,运行完with里的语句自动关Session result2=sess.run(product) p
IT架构圈
2018/06/01
4520
TensorFlow基础知识
x1、x2 表示输入,w1、w2 分别是 x1 到 y 和 x2 到 y 的权重,y=x1w1+x2w2。
foochane
2019/10/14
7920
TensorFlow基础知识
TensorFlow学习
TensorFlow学习0.导语1.Session会话控制(两种打开模式)2.Tensorflow使用Variable3.Placeholder 传入值4.激励函数(activate function)5.定义添加神经层的函数6.建造神经网络7.matplotlib 可视化8.学习文章
公众号guangcity
2019/09/20
6410
TensorFlow学习
TensorFlow应用实战 | TensorFlow基础知识
hw = tf.constant("Hello World! Mtianyan love TensorFlow!")
用户1332428
2018/07/30
1K0
TensorFlow应用实战 |  TensorFlow基础知识
tensorflow(一)windows 10 python3.6安装tensorflow1.4与基本概念解读
一.安装 目前用了tensorflow、deeplearning4j两个深度学习框架, tensorflow 之前一直支持到python 3.5,目前以更新到3.6,故安装最新版体验使用。
学到老
2018/03/19
1.6K0
tensorflow(一)windows 10 python3.6安装tensorflow1.4与基本概念解读
TensorFlow编程入门(一)
本文介绍如何使用TensorFlow搭建神经网络。首先介绍了TensorFlow的基础概念和主要组件,然后通过一个简单的线性回归例子展示了如何利用TensorFlow搭建神经网络。接着介绍了如何使用TensorFlow搭建卷积神经网络,并通过一个手写数字识别的例子进行了演示。最后介绍了如何使用TensorFlow搭建循环神经网络,并通过一个语音识别的例子进行了演示。
用户1148523
2018/01/09
6080
tensorflow(一)windows 10 64位安装tensorflow1.4与基本概念解读tf.global_variables_initializer
一.安装 目前用了tensorflow、deeplearning4j两个深度学习框架, tensorflow 之前一直支持到python 3.5,目前以更新到3.6,故安装最新版体验使用。 慢
学到老
2018/03/19
9310
tensorflow(一)windows 10 64位安装tensorflow1.4与基本概念解读tf.global_variables_initializer
tensorflow
此篇笔记参考来源为《莫烦Python》 tensorflow安装 在命令行模式下进入到python安装目录中的Scripts下,例如我的安装路径为:D:\Program Files (x86)\Python\Scripts 安装CPU版本的: pip3 install --upgrade tensorflow GPU版本: pip3 install --upgrade tensorflow-gpu 心酸啊,一开始使用这种方法超时了,想想就试着装一个anaconda吧,成功安装好了之后,但是IDLE中导入错误
闪电gogogo
2018/05/28
9090
TensorFlow基础
TensorFlow 使用图来表示计算任务. 图中的节点被称之为 op (operation 的缩写). 一个 op 获得 0 个或多个 Tensor, 执行计算, 产生 0 个或多个 Tensor. 每个 Tensor 是一个类型化的多维数组. 例如, 你可以将一小组图像集表示为一个四维浮点数数组, 这四个维度分别是 [batch, height, width, channels].
百川AI
2021/10/19
7480
OpenCV+TensorFlow 人工智能图像处理 (1)
OpenCV是一个开源的计算机视觉库,OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。
YingJoy_
2018/09/14
3.6K0
OpenCV+TensorFlow 人工智能图像处理  (1)
TF入门02-TensorFlow Ops
我们首先介绍一下TensorBoard的使用,然后介绍TensorFlow的基本ops,之后介绍张量的数据类型,最后介绍一下如何将自己的输入导入模型。
公众号-不为谁写的歌
2020/07/23
1.7K0
开刷Cs20之Tensorflow第二弹
本节学习来源斯坦福大学cs20课程,有关自学与组队学习笔记,将会放于github仓库与本公众号发布,欢迎大家star与转发,收藏!
公众号guangcity
2019/09/20
1.6K0
开刷Cs20之Tensorflow第二弹
TensorFlow从0到1丨第2篇:TensorFlow核心编程
上一篇Hello, TensorFlow!中的代码还未解释,本篇介绍TensorFlow核心编程的几个基本概念后,那些Python代码就很容易理解了。 与TensorFlow核心(Core)相对的是T
用户1332428
2018/03/07
1.1K0
TensorFlow从0到1丨第2篇:TensorFlow核心编程
TensorFlow 入门
---- CS224d-Day 2: 在 Day 1 里,先了解了一下 NLP 和 DP 的主要概念,对它们有了一个大体的印象,用向量去表示研究对象,用神经网络去学习,用 TensorFlow 去训练模型,基本的模型和算法包括 word2vec,softmax,RNN,LSTM,GRU,CNN,大型数据的 seq2seq,还有未来比较火热的研究方向 DMN,还有模型的调优。 今天先不直接进入理论学习,而是先学习一下 TensorFlow,在原课程里,这部分在第7讲,但是我觉得最高效地学习算法的方式,就是一边
杨熹
2018/04/02
1.5K0
TensorFlow 入门
Tensorflow从入门到精通(二):附代码实战
1.Tensor介绍 Tensor(张量)是Tensorflow中最重要的数据结构,用来表示Tensorflow程序中的所有数据。Tensor本是广泛应用在物理、数学领域中的一个物理量。那么在Tensorflow中该如何理解Tensor的概念呢? 实际上,我们可以把Tensor理解成N维矩阵(N维数组)。其中零维张量表示的是一个标量,也就是一个数;一维张量表示的是一个向量,也可以看作是一个一维数组;二维张量表示的是一个矩阵;同理,N维张量也就是N维矩阵。 在计算图模型中,操作间所传递的数据都可以看做是Te
磐创AI
2018/04/24
1.1K0
Tensorflow从入门到精通(二):附代码实战
TensorFlow极简入门教程
随着 TensorFlow 在研究及产品中的应用日益广泛,很多开发者及研究者都希望能深入学习这一深度学习框架。本文介绍了TensorFlow 基础,包括静态计算图、张量、TensorBoard 可视化和模型参数的保存等。
刘盼
2018/07/26
1.7K1
TensorFlow极简入门教程
斯坦福深度学习课程第六弹:一起来学Tensorflow part1
翻译:穆文&韩小阳 校对:寒小阳 & 龙心尘 导 读 之前的课程里介绍了自然语言处理当中的一些问题,以及设计出来的一些相应的算法。research的东西还是落地到工程应用上比较有价值,之前也手撸过一些toy project,不过这些实现要用在工程中,总是有那么些虚的,毕竟稳定性和效率未必能够保证。所幸的是,深度学习热度持续升温的大环境下,各种大神和各家大厂也陆续造福民众,开源了一些深度学习框架,在这些开源框架的基础上去搭建和实现自己想要的深度学习网络结构就简单和稳定得多了。 有时候选择多了也是麻烦,对框架
大数据文摘
2018/05/22
6750
TensorFlow修炼之道(3)——计算图和会话(Graph&Session)
在计算图中,节点表示计算单位,边表示计算用到和产生的数据。 例如,在TensorFlow图中,tf.matmul操作将对应于具有两个输入边(要乘以的矩阵)和一个输出边(乘法的结果)的单个节点。
abs_zero
2018/04/11
1.8K0
TensorFlow是什么?怎么用?终于有人讲明白了
导读:在开始使用TensorFlow之前,必须了解它背后的理念。该库很大程度上基于计算图的概念,除非了解它们是如何工作的,否则无法理解如何使用该库。本文将简要介绍计算图,并展示如何使用TensorFlow实现简单计算。
IT阅读排行榜
2019/11/18
1.3K0
TensorFlow中常量与变量的基本操作演示
TensorFlow中常量与变量的基本操作演示 本文将介绍TensorFlow中的基本算法运算与矩阵运算,介绍Tensorflow中常量、变量、操作符等基本运算单元概念,同时会辅助介绍会话与变量初始化等概念。谷歌使用tensorflow来命名它的深度学习框架,可以说是十分贴切的,可以分为两个单词解释tensorflow分别为tensor与flow。tensor意思翻译为中文张量,但是到底什么才是张量,tensorflow官方对此的解释是: tensor表示N维的数组,向量就是一维张量、矩阵就是二维张量,其它
OpenCV学堂
2018/04/04
1.5K0
TensorFlow中常量与变量的基本操作演示
相关推荐
人工智能python的tensorflow基础
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档