Tensorflow基础——基础操作

Tensorflow基础

基础概念

  • tensor:张量(数据)
  • operation(op):专门运算的操作节点,所有操作都是一个op
  • graph:图,整个程序的结构
  • Session:会话,运算程序的图

Tensorflow属于计算密集型,大多是在cpu上进行计算。
django、scrapy属于IO密集型,比如http请求,磁盘操作等等。

图默认已经注册,一组表示 tf.Operation计算单位的对象和tf.Tensor表示操作之间流动的数据单元的对象。

获取调用:
tf.get_default_graph()
op、sess或者tensor 的graph属性

import tensorflow as tf
tf.compat.v1.disable_eager_execution()

#创建一张图,包含了op和tensor
g = tf.Graph()
print(g)
#新创建的图分配新的内存地址
with tf.compat.v1.Session() as sess:
    c = tf.constant(11.0)
    print(c.graph)

#这个sess下的图和下面sess下的图共用一个地址

a = tf.constant(5.0)
b = tf.constant(6.0)

sum1 = tf.add(a, b)

#默认的这张图,相当于是给程序分配一段内存
graph = tf.compat.v1.get_default_graph()

print(graph)
with tf.compat.v1.Session() as sess:
    print(sess.run(sum1))
    print(a.graph)
    print(sum1.graph)
    print(sess.graph)

op

在这里插入图片描述op:只要使用tensorflow的API定义的函数都是op
tensor:知道的就是数据,进行运算,载体

会话

1.会话
前端系统:定义程序的图的结构(用API)
后端系统:运算图结构

会话:连接前端和后端,解析API进行运算。
作用:运行图结构;分配资源计算;掌握资源(变量、队列、线程)

tf.Session()
运行TensorFlow操作图的类,使用默认注册的图(可以指定运行图)
sess = tf.Session()   #创建图
sess.run(…)      # 启动图
sess.close()      #关闭图,资源释放
  使用上下文管理器,默认使用完关闭图
with tf.Session() as sess:
  sess.run(…)
一个图可以在多个sess中运行,一个sess也能运行多个图

2.会话的run方法

run(fetches, feed_dict=None,graph=None)
运行ops和计算tensor
feed_dict 允许调用者覆盖图中指定张量的值,提供给placeholder使用

a = tf.constant(5.0)
var = 2.0
sum2 = a + var 
print(sum2)

with tf.compat.v1.Session() as sess:
    print(sess.run(sum2))

#也可以运行,var会被重载为tensor类型。

3.Tensorflow Feed操作

意义:在程序执行的时候,不确定输入的是什么,提前“占个坑”
语法:placeholder提供占位符,run时候通过feed_dict指定参数

import tensorflow as tf

input1 = tf.compat.v1.placeholder(tf.float32)
input2 = tf.compat.v1.placeholder(tf.float32)
output = tf.add(input1, input2)

with tf.compat.v1.Session() as sess:
    print(sess.run(output, feed_dict={input1:10.0,input2:20.0}))

张量

1.张量的阶

  • Tensorflow基本的数据格式
  • 一个类型化的N维度数组(tf.Tensor)
  • 三部分,名字,形状,数据类型
    在这里插入图片描述
    2.张量的数据类型
    在这里插入图片描述
    张量属性:

graph   张量所属的默认图
op     张量的操作名
name   张量的字符串描述
shape   张量形状

张量的形状:
0维:()  1维: (5)   2维:(5,6)  3维:(2,3,4)

3.静态形状和动态形状

TensorFlow中,张量具有静态形状和动态形状。

静态形状:创建一个张量或者由操作推导出一个张量时,初始状态的形状。

tf.Tensor.get_shape:获取静态形状
tf.Tensor.set_shape():更新Tensor对象的静态形状

对于静态形状来说,一旦张量形状固定,不能再次设置张量形状。并且,不能跨维度修改。

plt = tf.compat.v1.placeholder(tf.float32, ([None, 2]))
print(plt)
plt.set_shape([3,2])
print(plt)

动态形状:一种描述原始张量在执行过程中的一种形状

tf.reshape:创建一个具有不同动态形状的新张量

用动态形状可以创建一个新的张量,但是改变时候要注意元素数量的匹配。可以跨维度修改。

plt_reshape = tf.compat.v1.reshape(plt,([2,3]))

总结:
1、转换静态形状的时候,1-D到1-D,2-D到2-D,不能跨阶数改变形状
2、 对于已经固定或者设置静态形状的张量/变量,不能再次设置静态形状
3、tf.reshape()动态创建新张量时,元素个数不能不匹配

4.张量操作——生成张量

(1)固定值张量
在这里插入图片描述(2)创建随机张量
在这里插入图片描述
5.张量操作-张量变换
(1)改变类型
改变张量的数值类型。常用万能的:tf.cast()
在这里插入图片描述(2)形状和变换
可用于改变张量的形状。
在这里插入图片描述张量的合并:

tf.concat(values, axis, name=‘concat’)

a = [[1,2,3],[4,5,6]]
b = [[7,8,9],[10,11,12]]
c = tf.concat([a, b], axis=0)
d = tf.concat([a, b], axis=1)
with tf.compat.v1.Session() as sess:
    print(sess.run(c))
    print(sess.run(d))
----------------------------------------------------
[[ 1  2  3]
 [ 4  5  6]
 [ 7  8  9]
 [10 11 12]]
[[ 1  2  3  7  8  9]
 [ 4  5  6 10 11 12]]

查询API:https://www.tensorflow.org/versions/r1.0/api_guides/python/math_ops

6.变量
变量也是一种OP,是一种特殊的张量,能够进行存储持久化,它的
值就是张量。
(1)变量的创建

tf.Variable(initial_value=None,name=None)
创建一个带值initial_value的新变量
  assign(value)
  为变量分配一个新值
  返回新值
  eval(session=None)
  计算并返回此变量的值
  name属性表示变量名字

(2)变量的初始化

tf.compat.v1.global_variables_initializer()
添加一个初始化所有变量的op

要在在会话中开启。

a = tf.constant([1,2,3,4,5])
var = tf.Variable(tf.compat.v1.random_normal([2, 3], mean=0, stddev = 1.0))
init = tf.compat.v1.global_variables_initializer()

with tf.compat.v1.Session() as sess:
    sess.run(init)
    print(sess.run([a, var]))
-----------------------------------------------------------------
[array([1, 2, 3, 4, 5]), array([[-0.07054713, -0.5413116 ,  0.31160733],[-1.5784912 ,  1.5512209 , -1.481433  ]], dtype=float32)]

tensorboard可视化

1.可视化步骤
(1)数据序列化—events文件
TensorBoard 通过读取 TensorFlow 的事件文件来运行

tf.summary.FileWriter(‘路径/’, graph=default_graph)
返回filewriter,写入事件文件到指定目录(最好用绝对路径),以提供给tensorboard使用

(2)开启:tensorboard --logdir=路径
在这里插入图片描述
2.增加变量显示
目的:观察模型的参数、损失值等变量值的变化。

(1)收集变量
tf.summary.scalar(name=’’,tensor) 收集对于损失函数和准确率
等单值变量,name为变量的名字,tensor为值
tf.summary.histogram(name=‘’,tensor) 收集高维度的变量参数
tf.summary.image(name=‘’,tensor) 收集输入的图片张量能显示图
(2)合并变量写入事件文件
merged = tf.summary.merge_all()
运行合并:summary = sess.run(merged),每次迭代都需运行
添加:FileWriter.add_summary(summary,i),i表示第几次的值

a = tf.constant(3.0, name='a')
b = tf.constant(4.0, name='b')
c = tf.add(a, b, name='add')
var = tf.Variable(tf.compat.v1.random_normal([2, 3], mean=0, stddev = 1.0), name='variable')

init = tf.compat.v1.global_variables_initializer()

with tf.compat.v1.Session() as sess:
    sess.run(init)
    filewriter = tf.compat.v1.summary.FileWriter('logs', graph = sess.graph)
    print(sess.run([a, var]))

线性回归的实现

API:
矩阵运算:tf.matmul(x, w)
平方:tf.square(error)
均值:tf.reduce_mean(error)
梯度下降API:tf.train.GradientDescentOptimizer(learning_rate)

模型保存和加载

tf.train.Saver(var_list=None,max_to_keep=5)
var_list:指定将要保存和还原的变量。它可以作为一个
dict或一个列表传递.
max_to_keep:指示要保留的最近检查点文件的最大数量。
创建新文件时,会删除较旧的文件。如果无或0,则保留所有
检查点文件。默认为5(即保留最新的5个检查点文件。)

例如:
saver.save(sess, ‘/tmp/ckpt/test/model’)
saver.restore(sess, ‘/tmp/ckpt/test/model’)
保存文件格式:checkpoint文件

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值