前往小程序,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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
MacOS 11-13.x(PKG系统安装包及IPSW固件)11.6.8/12.5.1/13.0 Beta 5(public beta 3)通用版
macOS 13 Ventura,具有许多功能,包括 Stage Manager 和更新的 Spotlight 搜索。目前,苹果已经发布了开发者测试版,顾名思义,这个版本是为开发者准备的。
啾咪啾咪
2022/08/26
3780
MacOS 11-13.x(PKG系统安装包及IPSW固件)最新通用版
macOS 13 Ventura,具有许多功能,包括 Stage Manager 和更新的 Spotlight 搜索。目前,苹果已经发布了开发者测试版,顾名思义,这个版本是为开发者准备的。
Mac小小
2022/08/10
6730
MacOS 11-13.x(PKG系统安装包及IPSW固件)11.7/12.6.0/13.0 Beta 7
macOS Monterey 操作系统更新,并且带来了 Safari、地图、FaceTime、Notes、照片、消息等应用程序的大量新功能与改进。macOS Monterey 带来多项开创性功能,助力用户以全新方式沟通交流、完成更多任务、使用多台 Apple 设备顺畅开展工作。
啾咪啾咪
2022/09/13
6200
MacOS 11-13.x(PKG系统安装包及IPSW固件)
macOS 13 Ventura,具有许多功能,包括 Stage Manager 和更新的 Spotlight 搜索。目前,苹果已经发布了开发者测试版,顾名思义,这个版本是为开发者准备的。
Mac知识分享
2022/09/30
9300
macOS Developer Beta Access Utility(苹果开发者工具)
Apple 今日发布了 macOS 的下一个版本,称为macOS Ventura,它具有多项新功能,包括 Stage Manager、Continuity Camera、新的安全更新等。
Mac知识分享
2022/08/30
1K0
MacOS 11-13.x 11.7.6/12.6.5/13.3.1通用版
macOS Ventura 进一步优化了 Mac 上的各种日常操作,并为“邮件”、“信息”和 Safari 浏览器等常用 App 带来重大更新。通过“连续互通相机”,你可以将 iPhone 用作 Mac 的网络摄像头。还可以通过“台前调度”这一全新方式自动整理窗口。升级 Mac 后,可以获得最新的安全和隐私保护。
用户10121095
2023/04/20
6630
macOS 12 Monterey(苹果最新系统)v12.5正式版
Mac操作系统下一版本将被称为 macOS Monterey,这里为您带来macOS Monterey尝鲜下载,喜欢的不要错过哦!
Mac软件分享
2022/07/21
1.4K0
macOS 12 Monterey(苹果最新系统)v12.5正式版
macOS 12 Monterey (苹果最新系统)v12.5.1正式版
macOS 12 Monterey 可让您以全然一新的方式联络、分享和创造。体验全新增强的 FaceTime 音频和视频通话功能,包括人像模式。使用专注模式、快速备忘录和 Safari 浏览器中的“标签页组”等功能强大的生产力工具提升效率。
Mac知识分享
2022/08/22
4K0
MacOS大版本更新!增强版「全局控制」,操纵多台终端,只需一套键鼠
---- 新智元报道   来源:网络 编辑:小咸鱼 【新智元导读】苹果今天发布了macOS Monterey正式版。macOS Monterey带来多种新方式,助力用户在Apple设备上沟通联络、提升效率和流畅性。 10月18号,2款搭载「最强猛兽」最新M1系列芯片(M1 Pro,M1 Max)的Mac正式亮相:一款是MacBook Pro 14,另一款是MacBook Pro 16。 发布结束后,苹果表示新的 macOS Monterey 将会在 10 月 25 日正式推出。 非常准时呀,10月2
新智元
2023/05/22
8550
MacOS大版本更新!增强版「全局控制」,操纵多台终端,只需一套键鼠
macos 安装包下载:MacOS 11-13.x安装包通用 版
macOS Big Sur采用宽阔的新设计,许多应用经过重新设计,包括邮件、照片、便笺和iWork等。导览更为轻松,用户有了更多的控制能力。窗口边角的弯曲度以及调色板和各种素材得到优化,可提供更多信息和能力。
啾咪啾咪
2022/10/10
2.2K0
macOS Ventura13.0正式版
macOS Ventura13.0正式版已上线,众多新功能,随 macOS Ventura 而来。macOS Ventura 让各种日常操作都进化成神操作,一波新技能助你搞定更多。
用户10121095
2022/10/25
7760
Mac系统重装指南(不抹盘):2023版保姆级教程,轻松解决macOS问题并保留数据和软件
本文为CSDN用户群体准备的Mac系统重装指南,详细介绍了在不抹盘的情况下如何重装系统,并保留Mac中的数据和软件。文章分为Apple芯片和Intel处理器的重装步骤,适用于不同类型的Mac机型。通过简单的操作,你可以轻松完成系统重装。
猫头虎
2024/04/08
3.6K0
Mac系统重装指南(不抹盘):2023版保姆级教程,轻松解决macOS问题并保留数据和软件
Parallels Desktop 18 激活码 - Mac 上优秀的虚拟机软件
Parallels Desktop 被认为是 macOS 上最强大的虚拟机软件。可以模拟运行Windows、Linux等各种操作系统和软件。同时在Mac下无需重启电脑,并且可以在不同系统之间随意切换。
Jianeryi
2022/12/19
3.5K0
Parallels Desktop 18 激活码 - Mac 上优秀的虚拟机软件
苹果今日正式推送iOS 10/macOS Sierra公测版本
在上月举行的WWDC全球开发者大会上,苹果更新了旗下四大操作系统,其中iOS 10 和macOS Sierra这两个移动与桌面端的系统都已经公布了开发者预览版本,并承诺会在7月份公布公测版。 而就在今
镁客网
2018/05/28
5790
关于MacOS的100个问题(第3期)
左侧是第三方软件的UI, 右侧是macOS自带的软件UI, 右侧的这个图标怎么说呢?
zhaoolee
2020/11/24
1.9K0
关于MacOS的100个问题(第3期)
相关推荐
MacOS 11-13.x(PKG系统安装包及IPSW固件)11.6.8/12.5.1/13.0 Beta 5(public beta 3)通用版
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档