当前位置: 首页 > 编程日记 > 正文

TensorFlow——入门基础

TensorFlow原理:
TensorFlow使用Graph来描述计算任务,图中的节点被称之为op.一个op可以接受0或多个tensor作为输入,也可产生0或多个tensor作为输出.任何一个Graph要想运行,都必须借助上下文Session.通过Session启动Graph,并将Graph中的op分发到CPU或GPU上,借助Session提供执行这些op.op被执行后,将产生的tensor返回.借助Session提供的feedfetch操作,我们可以为op赋值或者获取数据.计算过程中,通过变量(Variable)来维护计算状态.
1、TensorFlow基本概念
基本概念 
类型
描述
用途
Session
会话
图必须在称之为“会话”的上下文中执行。会话将图的op分发到诸如CPU或者GPU上计算
Graph
描述计算过程
必须在Session中启动
tensor
数据(张量)
数据类型之一,代表多维数组
op
操作
图中的节点被称之为op,一个op获得0或者多个Tensor,执行计算,产生0或者多个Tensor
Variable
变量
数据类型之一,运行过程中可以被改变,用于维护状态
feed
赋值
为op的tensor赋值
fetch
取值
从op的tensor中取值
Constant
常量
数据类型之一,不可变


2、计算图(Graph)
(1)在TensorFlow中,系统会自动维护一个默认的计算图,通过tf.get_default_graph函数可以获取当前默认的计算图
#通过a.graph可以查看张量所属的计算图。因为没有特意指定,所以这个计算图
#应该等于当前默认的计算图。所以下面这个操作输出值为True
print(a.graph is tf.get_default_graph())
(2)TensorFlow支持通过tf.Graph函数来生成新的计算图
g1=tf.Graph()
with g1.as_default(): #在计算图g1中定义变量’v',并设置初始值为0
v=tf.get_variable('v',initializer=tf.zeros_initializer([1]))

3、创建图和启动图
创建一个图并在Session中执行(TensorFlow实现一个简单的矩阵乘法)
import tensorflow as tf #引入TensorFlow
v1=tf.constant([[2,3]]) #创建一个常量v1,它是一个12列的矩阵
v2=tf.constant([[2],[3]]) #创建一个常量v2,它是一个21列的矩阵
#创建一个矩阵乘法,创建乘法后,是不会立即执行的,要在会话中执行
product=tf.matmul(v1,v2)
sess=tf.Session() #定义一个会话
result=sess.run(product) #运算乘法,得到结果
print(result) #打印结果 #结果为 [[13]]
sess.close() #关闭会话

4、 创建一个变量,并用for循环对变量进行赋值操作
TensorFlow使用Variables来维护图执行过程中的状态信息
import tensorflow as tf #引入TensorFlow
num=tf.Variable(0,name='count') #创建一个变量num,初始化为0
new_value=tf.add(num,10) #创建一个加法操作,把当前数字加10
op=tf.assign(num,new_value) #创建一个赋值操作,把new_value赋值给num
#使用Python的上下文管理器机制,在运行完毕后,会话会自动关闭
with tf.Session() as sess:
sess.run(tf.global_variables_initializer()) #初始化变量
print(sess.run(num)) #打印最初的num
for i in range(5): #创建一个for循环,每次给num+10,并打印出来
sess.run(op)
print(sess.run(num))
#输出结果如下
'''
0
10
20
30
40
50
'''
5、通过feed设置placeholder的值
import tensorflow as tf
input1=tf.placeholder(tf.float32) #创建一个变量占位符input1
input2=tf.placeholder(tf.float32) #创建一个变量占位符input2
#创建一个乘法操作,把input1input2相乘
new_value=tf.multiply(input1,input2)
#创建会话,使用此方法,在运行完毕后,会话自动关闭
with tf.Session() as sess:
#打印new_value的值,在运算时,用feed设置两个输入的值
print(sess.run(new_value,feed_dict={input1:[23.0],input2:[11.0]}))
#结果为253.0

6、通过Fetch在会话中同时设置多个op
import tensorflow as tf
input1=tf.constant(3.0) #设置三个常量
input2=tf.constant(2.0)
input3=tf.constant(5.0)
add=tf.add(input2,input3) #加法操作
mul=tf.multiply(input1,add) #乘法操作
with tf.Session() as sess:
result=sess.run([mul,add]) #在sess的运算中可以取回多个tensor
print(result)
#结果为[21.0, 7.0]

7、TensorFlow简单示例(实现单变量线性回归)
import tensorflow as tf
import numpy as np
#随机生成训练集
x_data=np.random.rand(100) #使用numpy生成100随机点
y_data=x_data*0.1+0.2

#构造一个线性模型
b=tf.Variable(0.) #设置参数变量并初始化为0
k=tf.Variable(0.)
y=k*x_data+b

#二次代价函数(损失函数)
loss=tf.reduce_mean(tf.square(y_data-y))
#定义一个梯度下降法来进行训练的优化器
optimizer=tf.train.GradientDescentOptimizer(0.2) #0.2表示学习率
#最小化代价函数
train=optimizer.minimize(loss)

init=tf.global_variables_initializer() #初始化变量
with tf.Session() as sess:
sess.run(init) #在会话里运行初始化变量
for step in range(201): #迭代训练200
sess.run(train)
if step%20==0: #每迭代20次输出kb的值
print(step,sess.run([k,b]))

结果:

8、TensorFlow实现神经网络向前传播算法
import tensorflow as tf
#声明w1w2两个变量
#通过seed参数设定了随机种子,可以保证每次运行得到的结果一样
#生成一个2*3的矩阵,矩阵中的元素是均值为0,标准差为1的随机数
w1=tf.Variable(tf.random_normal([2,3],stddev=1,seed=1))
w2=tf.Variable(tf.random_normal([3,1],stddev=1,seed=1))
'''
#将输入的特征向量定义为一个常量
x=tf.constant([[0.7,0.9]]) #x是一个1*2的矩阵
'''
#定义placeholder存放输入数据
x=tf.placeholder(tf.float32,shape=(3,2),name='x_input') #32列的样例数据

#通过前向传播算法获得神经网络的输出
a=tf.matmul(x,w1)
y=tf.matmul(a,w2)

with tf.Session() as sess:
init_op=tf.global_variables_initializer() #初始化所有的变量
sess.run(init_op)
print(sess.run(y,feed_dict={x:[[0.7,0.9],[0.1,0.4],[0.5,0.8]]}))

#结果为
'''
[[3.957578 ]
[1.1537654]
[3.1674924]]
'''

注:
(1)TensorFlow目前支持的所有随机数生成器

(2)



TensorFlow游乐场https://playground.tensorflow.org
参考资料:《TensorFlow实战Google深度学习框架》
参考博客:https://blog.csdn.net/dd864140130/article/details/71774229



相关文章:

EXT iconCls说明

今天学习ext 看examples中的事例,其中有一个地方是这样写的: new ButtonPanel( Icon Only, [{ iconCls: add16 },{ iconCls: add24, scale: medium },{ …

25个好用到爆的一行 Python 代码,建议收藏

作者 | 欣一来源 | Pyhton爱好集中营在学习Python的过程当中,有很多复杂的任务其实只需要一行代码就可以解决,那么今天小编我就来给大家介绍实用的一行Python代码,希望对大家能够有所帮助。1.两个字典的合并x {a: 1, b: 2} y {c: 3, d: 4}将…

【工业串口和网络软件通讯平台(SuperIO)教程】七.二次开发服务驱动

SuperIO相关资料下载:http://pan.baidu.com/s/1pJ7lZWf 1.1 服务接口的作用 围绕着设备驱动模块采集的数据,根据需求提供多种应用服务,例如:数据上传服务、数据请求服务、4-20mA服务、短信服务、LED服务以及OPC服务等。保障数…

usermod命令,用户密码管理和mkpasswd命令

2019独角兽企业重金招聘Python工程师标准>>> usermod 设置扩展组 概念:更改用户属性的一个命令。 用法:usermod [选项] 后面跟你需要操作的内容 [用户名] 选项:-c, --comment 注释 GECOS 字段的新值-d, --home HO…

extjs关于jsonreader

在JavaScript中,JSON是一种非常重要的数据格式,key:value的形式比XML那种复杂的标签结构更容易理解,代码量也更小,很多人倾向于使用它作为EXT的数据交换格式。JsonReader支持分页,与JSON数据对应格式如下:t…

求逆元 - HNU 13412 Cookie Counter

Cookie Counter Problems Link: http://acm.hnu.cn/online/?actionproblem&typeshow&id13412&courseid0 Mean: 将N分为D份,每份不超过X,有多少种分法? analyse: 首先我们想到的是迭代,但是数据太大,…

IEEE 发布年终总结,AI 奇迹不再是故事

编译 | 禾木木 出品 | AI科技大本营(ID:rgznai100) 2021 年,人工智能奇迹不再只是故事! 人工智能正在迅速融入各行各业,IEEE Spectrum 总结了 2021 年 10 篇最受读者欢迎的 AI 文章,按时间排名,…

一则利用内核漏洞获取root权限的案例【转】

转自:https://blog.csdn.net/u014089131/article/details/73933649 目录(?)[-] 漏洞描述漏洞的影响范围漏洞曝光时间漏洞产生的原因漏洞的利用exploit代码分析kernel 最近出了一个新的本地提权安全漏洞CVE-2013-1763,影响范围比较广泛,ubunt…

Ext.data库

Ext.data 库主要包括以下几个类:Ext.data.Store >DataSetExt.data.Record >DataSet.RowExt.data.DataProxy >SqlConnectionExt.data.DataReader >SqlDataAdapter以下分别进行介绍:1.Ext.data.Record可以用来定义一行数据的格式,它有几个重要的属性和方法…

2021年最有用的数据清洗 Python 库

作者 | 周萝卜来源 | 萝卜大杂烩大多数调查表明,数据科学家和数据分析师需要花费 70-80% 的时间来清理和准备数据以进行分析。对于许多数据工作者来说,数据的清理和准备也往往是他们工作中最不喜欢的部分,因此他们将另外 20-30% 的时间花在抱…

组合与继承之重写方法和字段

为什么80%的码农都做不了架构师?>>> 接上篇blog,scala里的字段和方法属于相同的命名空间,这让字段可以重写无参数方法。例如,你可以通过改变ArrayElement类中contents的实现将其从一个方法变为一个字段,而…

20165334 四则运算阶段性总结(第二周)

四则运算阶段性总结(第二周) 结对对象 学号 :20165334 姓名 : 李天龙 担任角色 (驾驶员):李天龙 (副驾驶):陈国超 一、实验实现步骤 整数计算类分数计算类自动…

取消掉Transfer-Encoding:chunked

有时候,Web服务器生成HTTP Response是无法在Header就确定消息大小的,这时一般来说服务器将不会提供Content-Length的头信息,而采用Chunked编码动态的提供body内容的长度。进行Chunked编码传输的HTTP Response会在消息头部设置:Tra…

【LeetCode】142 - Linked List Cycle II

Given a linked list, return the node where the cycle begins. If there is no cycle, return null. Follow up:Can you solve it without using extra space? Solution: Discuss上的分析:Suppose the first meet at step k,the length of the Cycle …

3000 字详解 Pandas 数据查询,建议收藏

作者 | 俊欣来源 | 关于数据分析与可视化今天小编来和大家说一说怎么从DataFrame数据集中筛选符合指定条件的数据,希望会对读者朋友有所帮助。导入数据集和模块我们先导入pandas模块,并且读取数据,代码如下import pandas as pd df pd.read_c…

stylus使用文档总结:内置方法+参数+条件+迭代+导入+继承

一、内置方法 返回各种颜色的比重(如red(color)等) 颜色函数是CSS预处里器中内置的颜色函数功能,这些功能可以对颜色值进行处理,例如颜色的变亮、变暗、渐变颜色等处理十分的方便。 lighten(color, 10%); /* 返回的颜色在color基础…

用 Python 制作酷炫的可视化大屏,特简单!

作者 | 小F来源 | 法纳斯特在数据时代,我们每个人既是数据的生产者,也是数据的使用者,然而初次获取和存储的原始数据杂乱无章、信息冗余、价值较低。要想数据达到生动有趣、让人一目了然、豁然开朗的效果,就需要借助数据可视化。以…

HTTP协议中的Tranfer-Encoding:chunked编码解析

当不能预先确定报文体的长度时,不可能在头中包含Content-Length域来指明报文体长度,此时就需要通过Transfer-Encoding域来确定报文体长度。通常情况下,Transfer-Encoding域的值应当为chunked,表明采用chunked编码方式来进行报文体的传输。chu…

[转] splice系列系统调用

关注splice系列系统调用(包括splice,tee和vmsplice)已经有一段时间了,开始的时候并未能领会splice的意义所在,致使得出了“splice系列系统调用不怎么实用”的错误结论。随着内核研究的深入,才逐渐懂得&…

嵌入式s5vp210裸机 KXTF9-2050(G-sensor)

1.KXTF9-2050简介 KXTF9-205是G-sensor的一种,G-sensor(Gravity sensor),重力传感器,又名加速度传感器(accelerometer),是能感知加速度大小的MEMS(微机电系统)传感器。使用I2C协议和…

JavaScript面向对象编程

自从有了Ajax这个概念,JavaScript作为Ajax的利器,其作用一路飙升。JavaScript最基本的使用,以及语法、浏览器对象等等东东在这里就不累赘了。把主要篇幅放在如何实现JavaScript的面向对象编程方面。1. 用JavaScript实现类 JavaScritpt没…

sublime text3 前端插件介绍

Emmet插件 Emmet插件可以说是使用Sublime Text进行前端开发必不可少的插件 它让编写HTML代码变得极其简单高效 基本用法:输入标签简写形式,然后按Tab键 关于Emmet的更多介绍,请查看官方文档 这份速查表,可以帮你快速记忆简写形式 …

如何使用 OpenCV Python 检测颜色

作者 | 小白来源 | 小白学视觉在这篇文章中,我们将看到如何使用 Python 中的 OpenCV 模块检测颜色,进入这个领域的第一步就是安装下面提到的模块。pip install opencv-python pip install numpy然后,导入模块。读取图像并使用 OpenCV 模块中的…

使用树形结构保存实体

阅读原文请访问我的博客BrightLoongs Blog之前在项目需要实现一个功能——将xml文件映射成实体,然后对映射的实体进行逻辑处理,最后保存到数据库中;由于xml结构的数据是结构化的数据,所以需要保证保存的数据具有正确的主外键关联。…

在Javascript中使用面向对象的编程

by Mike Koss March 26th, 2003 这是一篇,我个人认为最好的,Javascript面向对象编程的文章。翻译不好的地方,还望大家指正,谢谢。 如果您需要,可以访问下面的地址取得原文: http://mckoss.com/jscript/obj…

马斯克嘲笑「元宇宙」的想法,并给年轻人5条鸡汤

编译 | 禾木木出品 | AI科技大本营(ID:rgznai100)SpaceX 和特斯拉的CEO 马斯克在接受 The Babylon Bee 的采访中,当被问到元宇宙的问题时,马斯克只笑了笑。马斯克表示:“我对元宇宙这个概念没有什么印象,尽…

OpenLDAP自定义属性的启用

2019独角兽企业重金招聘Python工程师标准>>> # ucode# This multivalued field is used to record the values of the license or# registration plate associated with an individual.attributetype ( 2.16.840.1.113730.3.1.900 NAME ucode DESC user code …

硬中断与软中断的区别!

硬中断: 1. 硬中断是由硬件产生的,比如,像磁盘,网卡,键盘,时钟等。每个设备或设备集都有它自己的IRQ(中断请求)。基于IRQ,CPU可以将相应的请求分发到对应的硬件驱动上&am…

smarty模板

<?phprequire(../libs/Smarty.class.php);$smarty new Smarty;//$smarty->force_compile true;//$smarty->debugging true;//$smarty->caching true;//$smarty->cache_lifetime 120;$Name"Linux环境高级编程";$smarty->assign("name&qu…

乘“云原生”之风、踏“数字化”的浪,《新程序员003》开启预售!

12月30日&#xff0c;新年的钟声还有两天敲响&#xff0c;CSDN倾情策划出品的《新程序员003&#xff1a;云原生和全面数字化实践》&#xff08;以下简称《新程序员003》&#xff09;重磅开启预售&#xff01;新一年&#xff0c;新气象~预祝所有开发者在新的一年中大神附体&…