tensorflow零起点快速入门(2)

指定设备与矩阵乘法

使用tf.device("/gpu:0")用于指定设备进行运算。

在使用jupyter notebook的时候,可能会出现使用异常,需要使用config=tf.ConfigProto(allow_soft_placement=True)来处理。

该运行结果为12。属于叉乘。点乘使用另外的multiply。

config=tf.ConfigProto(allow_soft_placement=True)
with tf.Session(config=config) as sess:
    with tf.device("/gpu:0"):
        matrix1=tf.constant([[3,3]])
        matrix2=tf.constant([[2],[2]])
        product=tf.matmul(matrix1,matrix2)
        result=sess.run(product)
        print(result)

  

建立简单的张量流图计算

图为上述。cnt+a得到y,y通过assign赋值给cnt。

运行过程中,初始化变量后,通过每次运行assign,即完成了输出效果:1,2,3

config=tf.ConfigProto(allow_soft_placement=True)
cnt=tf.Variable(0,name="cnt")
a=tf.constant(1,name="a")
y=tf.add(cnt,a)
y2=tf.assign(cnt,y)
init=tf.initialize_all_variables()
with tf.Session(config=config) as ss:
    ss.run(init)
    xss=ss.run(cnt)
    for xc in range(3):
        ys2=ss.run(y2)
        print(ys2)
    xsum=tf.summary.FileWriter(".",ss.graph)

  

点乘数据

可以使用一维,二维,等进行点乘,只要数据对应即可。使用feed_dict进行数据输入。run后的返回值即为数据输出

a=tf.placeholder(tf.float32,name=‘ta‘)
b=tf.placeholder(tf.float32,name=‘tb‘)
c=tf.multiply(a,b,name=‘tc‘)
config=tf.ConfigProto(allow_soft_placement=True)
init=tf.initialize_all_variables()
with tf.Session(config=config) as ss:
    ss.run(init)
    xss=ss.run([c],feed_dict={a:[7,2],b:[2,2]})
    print(xss)
    xsum=tf.summary.FileWriter(".",ss.graph)

也可写成如下形式:将变量分离出来定义。

a=tf.placeholder(tf.float32,name=‘ta‘)
b=tf.placeholder(tf.float32,name=‘tb‘)
c=tf.multiply(a,b,name=‘tc‘)
config=tf.ConfigProto(allow_soft_placement=True)
init=tf.initialize_all_variables()
a_data=[[1,2,3],[4,5,6]]
b_data=[[2,3,4],[5,6,7]]
with tf.Session(config=config) as ss:
    ss.run(init)
    xss=ss.run([c],feed_dict={a:a_data,b:b_data})
    print(xss)
    xsum=tf.summary.FileWriter(".",ss.graph)

  

run过程的一些写法

书写过程中,可以使用中括号,然后输出(本次输出为【7,21】)

a=tf.constant(3,name=‘ta‘)
b=tf.constant(2,name=‘tb‘)
c=tf.constant(5,name=‘tc‘)
m1=tf.add(b,c,name=‘m1‘)
m2=tf.multiply(a,m1,name=‘m2‘)
config=tf.ConfigProto(allow_soft_placement=True)
with tf.Session(config=config) as ss:
    xss=ss.run([m1,m2])
    print(xss)
    xsum=tf.summary.FileWriter(".",ss.graph)

也可以如下所代表的批量输出:

y2,w2,l2=ss.run(y),ss.run(w),ss.run(loss)

  

构建单神经元的神经网络

y=w*x

loss=(y-y_)^2

使用学习率为0.025的梯度下降,最小化loss。

定义完模型后,通过tf.summary.scalar控制tensorboard输出scalar数据图,显示数据的变化情况。

然后进行运算,最终的结果,通过saver=tf.train.Saver()的一些方法保存模型(训练后的模型)

w=tf.Variable(0.8,name=‘weight‘)
x=tf.constant(2.0,name=‘input‘)
y=tf.multiply(w,x,name=‘output‘)
y_=tf.constant(0.0,name=‘correct_value‘)
loss=tf.pow(y-y_,2,name=‘loss‘)
train_step=tf.train.GradientDescentOptimizer(0.025).minimize(loss)

with tf.name_scope(‘summar‘):
    for value in [x,w,y,y_,loss]:
        tf.summary.scalar(value.op.name,value)
    #tf.summary.histogram(‘histogram‘,w)
    #tf.summary.histogram(‘loss‘,loss)
    summaries=tf.summary.merge_all()

config=tf.ConfigProto(allow_soft_placement=True)
init=tf.initialize_all_variables()

with tf.Session(config=config) as ss:
    xsum=tf.summary.FileWriter(".",ss.graph)
    xss=ss.run(init)
    for i in range(100):
        x_data=ss.run(summaries)
        xsum.add_summary(x_data,i)
        x_data=ss.run(train_step)
        y2,w2,l2=ss.run(y),ss.run(w),ss.run(loss)
        print(i,‘ ‘,y2,‘ ‘,w2,‘ ‘,l2,‘ ‘)
    saver=tf.train.Saver()
    saver.save(ss,‘tmp/.‘)

  

构建的张量图如上,点击其中的一些空心圆,可以查看其数值,操作,在gradient模块中,点开可以看到内部详细的结构。

通过上述代码,在summer中归并了一些scalar图如下:

在迭代100次后,输出为:

模型读取

大致是这样,只是有时候会因为变量不匹配无法读取

使用Saver时候,需要先把变量设置好,可能会有NotFoundError

w=tf.Variable(0.8,name=‘weight‘)
x=tf.constant(2.0,name=‘input‘)
y=tf.multiply(w,x,name=‘output‘)
y_=tf.constant(0.0,name=‘correct_value‘)
loss=tf.pow(y-y_,2,name=‘loss‘)
train_step=tf.train.GradientDescentOptimizer(0.025).minimize(loss)
config=tf.ConfigProto(allow_soft_placement=True)
init=tf.initialize_all_variables()
with tf.Session(config=config) as ss:
    xss=ss.run(init)
    saver=tf.train.Saver()
    saver.restore(ss,‘tmp/.‘)
    print(ss.run(loss))

  

原文地址:https://www.cnblogs.com/bai2018/p/11881303.html

时间: 2024-10-08 09:17:25

tensorflow零起点快速入门(2)的相关文章

tensorflow零起点快速入门(6) --np与tf

numpy.random.uniform np.random.rand 原文地址:https://www.cnblogs.com/bai2018/p/12133993.html

零基础快速入门web学习路线(含视频教程)

下面小编专门为广大web学习爱好者汇总了一条完整的自学线路:零基础快速入门web学习路线(含视频教程)(绝对纯干货)适合初学者的最新WEB前端学习路线汇总! 在当下来说web前端开发工程师可谓是高福利.高薪水的职业了.所以现在学习web前端开发的技术人员也是日益增多了,但是在学习web前端开发中盲目的去学习而没有一个完整的思路和学习路线也是不行的. 成为一个合格的web前端开发工程师的具备什么条件? 熟练的掌握HTML.CSS.JS.JQ等最基本的技术. 现在,只掌握这些已经远远不够了.无论是开

小D课堂 - 零基础入门SpringBoot2.X到实战_第1节零基础快速入门SpringBoot2.0_1、SpringBoot2.x课程介绍和高手系列知识点

1 ======================1.零基础快速入门SpringBoot2.0 5节课 =========================== 1.SpringBoot2.x课程全套介绍和高手系列知识点     简介:介绍SpringBoot2.x课程大纲章节         java基础,jdk环境,maven基础 2.SpringBoot2.x依赖环境和版本新特性说明 简介:讲解新版本依赖环境和springboot2新特性概述 1.依赖版本jdk8以上, Springboot2

Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 2. 变量

大家在中学就已经学过变量的概念了.例如:我们令 x = 100,则可以推出 x*2 = 200 试试下面这段 Python 代码 1 import turtle 2 3 turtle.shape("turtle") 4 x = 100 5 turtle.forward(x) 6 turtle.left(45) 7 turtle.forward(2*x) 8 9 turtle.exitonclick() 运行上面的代码,小海龟将画出下面的图案 x = 100 声明了变量 x,并将它赋值为

Kubernetes零基础快速入门!初学者必看!

起源 Kubernetes 源自于 google 内部的服务编排系统 - borg,诞生于2014年.它汲取了google 十五年生产环境的经验积累,并融合了社区优秀的idea和实践经验. 名字 Kubernetes 这个名字,起源于古希腊,是舵手的意思,所以它的 logo 即像一张渔网又像一个罗盘,谷歌选择这个名字还有一个深意:既然docker把自己比作一只鲸鱼,驮着集装箱,在大海上遨游,google 就要用Kubernetes去掌握大航海时代的话语权,去捕获和指引着这条鲸鱼按照主人设定的路线

H5和小程序直播开发 零距离快速入门

第1章 课程介绍 对于课程整体以及直播行业的现状进行介绍 第2章 直播工作原理 所谓知其然也要知其所以然,只会用别人总结好的东西很难有质的进步,只有深谙背后的工作原理才能进一步吃透到进阶.本章从直播协议入手到工作原理详解,步步为营,化繁为简,极易吸收. 第3章 Video详解 video是视频播放的基石,无论是点播还是直播,都要掌握其应用,本章详细讲述了大家平时不知道还特别重要的方法.属性.事件,结合实例演示祝你更上一层楼. 第4章 直播流的制作 对于直播技术而言,非常重要的一个技能就是制作直播

零基础快速入门SpringBoot2.0 (一)

一.SpringBoot2.x依赖环境和版本新特性说明 简介:讲解新版本依赖环境和springboot2新特性概述 1.依赖版本jdk8以上, Springboot2.x用JDK8, 因为底层是 Spring framework5, 2.安装maven最新版本,maven3.2以上版本,下载地址 :https://maven.apache.org/download.cgi 3.Eclipse或者IDE 4.新特性 5.翻译工具:https://translate.google.cn/ 6.spr

零基础快速入门SpringBoot2.0 教程(二)

一.SpringBoot2.x使用Dev-tool热部署简介:介绍什么是热部署,使用springboot结合dev-tool工具,快速加载启动应用 官方地址:https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-SNAPSHOT/reference/htmlsingle/#using-boot-devtools 核心依赖包: <dependency> <groupId>org.springframework.boot</gro

零基础快速入门SpringBoot2.0教程 (四)

一.JMS介绍和使用场景及基础编程模型简介:讲解什么是小写队列,JMS的基础知识和使用场景 1.什么是JMS: Java消息服务(Java Message Service),Java平台中关于面向消息中间件的接口 2.JMS是一种与厂商无关的 API,用来访问消息收发系统消息,它类似于JDBC(Java Database Connectivity).这里,JDBC 是可以用来访问许多不同关系数据库的 API 3.使用场景: 1)跨平台 2)多语言 3)多项目 4)解耦 5)分布式事务 6)流量控