关闭警告

  1. import os
  2. os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'

一些概念

tensor 张量(数据) flow 流动 op 操作(tfapi都是) graph 图(内存单元) session 会话
一个session只能运行一张图
a = tf.constant(5.0) 定义一个张量
一些属性:graph name shape op

tf.Session() 运行TensorFlow操作图的类,使用默认注册的图(可以指定运行图)
会话资源 会话可能拥有很多资源,如 tf.Variable,tf.QueueBase 和tf.ReaderBase,
会话结束后需要进行资源释放 sess = tf.Session() sess.run(…) sess.close()
使用上下文管理器
with tf.Session(graph=,,,) as sess:
sess.run(a)# 返回5
sess.close()

交互式:
session(config=tf.ConfigProto(log_device_placement=True))
或tf.InteractiveSession()
现在就不用一直run了,可以直接 a.eval()

run:

run(fetches, feed_dict=None,graph=None)
fetches可以是一个张量运算,list,dict,ordereddict

feed_dict 允许调用者覆盖图中指定张量的值,提供给 placeholder使用 相当于是先占一个坑 ,feed_dict中传入参数使用。
image.png
报错:
RuntimeError:如果它Session处于无效状态(例如已关闭)。。。。、。
TypeError:如果fetches或feed_dict键是不合适的类型。
ValueError:如果fetches或feed_dict键无效或引用 Tensor不存在。

shape 设置与修改

  1. plt = tf.placeholder(tf.float32, [None, 2])
  2. print(plt)
  3. plt.set_shape([3, 2, 1])
  4. print(plt)
  5. # plt.set_shape([2, 3]) # 静态形状 不能再次修改
  6. plt_reshape = tf.reshape(plt, [3, 2])# 元素数量要匹配
  7. print(plt_reshape)

静态形状和动态形状

静态形状: 创建一个张量或者由操作推导出一个张量时,初始状态的形状
tf.Tensor.get_shape:获取静态形状
tf.Tensor.set_shape():更新Tensor对象的静态形状,通常用于在不能直接推 断的情况下

动态形状: 一种描述原始张量在执行过程中的一种形状
tf.reshape:创建一个具有不同动态形状的新张量

创建张量

固定值张量

image.png

随机张量

image.png

张量的修改

类型的修改

image.png

形状的修改

image.png

张量的拼接

tensorflow中用来拼接张量的函数tf.concat(),用法:
tf.concat([tensor1, tensor2, tensor3,…], axis)
先给出tf源代码中的解释:

  1. t1 = [[1, 2, 3], [4, 5, 6]]
  2. t2 = [[7, 8, 9], [10, 11, 12]]
  3. tf.concat([t1, t2], 0) # [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]
  4. tf.concat([t1, t2], 1) # [[1, 2, 3, 7, 8, 9], [4, 5, 6, 10, 11, 12]]
  5. # tensor t3 with shape [2, 3]
  6. # tensor t4 with shape [2, 3]
  7. tf.shape(tf.concat([t3, t4], 0)) # [4, 3]
  8. tf.shape(tf.concat([t3, t4], 1)) # [2, 6]

这里解释了当axis=0和axis=1的情况,怎么理解这个axis呢?其实这和numpy中的np.concatenate()用法是一样的。
axis=0 代表在第0个维度拼接
axis=1 代表在第1个维度拼接

数学函数api文档

https://www.tensorflow.org/api_docs/python/tf/math