关闭警告
import os
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中传入参数使用。
报错:
RuntimeError:如果它Session处于无效状态(例如已关闭)。。。。、。
TypeError:如果fetches或feed_dict键是不合适的类型。
ValueError:如果fetches或feed_dict键无效或引用 Tensor不存在。
shape 设置与修改
plt = tf.placeholder(tf.float32, [None, 2])
print(plt)
plt.set_shape([3, 2, 1])
print(plt)
# plt.set_shape([2, 3]) # 静态形状 不能再次修改
plt_reshape = tf.reshape(plt, [3, 2])# 元素数量要匹配
print(plt_reshape)
静态形状和动态形状
静态形状:
创建一个张量或者由操作推导出一个张量时,初始状态的形状
tf.Tensor.get_shape:获取静态形状
tf.Tensor.set_shape():更新Tensor对象的静态形状,通常用于在不能直接推
断的情况下
动态形状:
一种描述原始张量在执行过程中的一种形状
tf.reshape:创建一个具有不同动态形状的新张量
创建张量
固定值张量
随机张量
张量的修改
类型的修改
形状的修改
张量的拼接
tensorflow中用来拼接张量的函数tf.concat(),用法:
tf.concat([tensor1, tensor2, tensor3,…], axis)
先给出tf源代码中的解释:
t1 = [[1, 2, 3], [4, 5, 6]]
t2 = [[7, 8, 9], [10, 11, 12]]
tf.concat([t1, t2], 0) # [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]
tf.concat([t1, t2], 1) # [[1, 2, 3, 7, 8, 9], [4, 5, 6, 10, 11, 12]]
# tensor t3 with shape [2, 3]
# tensor t4 with shape [2, 3]
tf.shape(tf.concat([t3, t4], 0)) # [4, 3]
tf.shape(tf.concat([t3, t4], 1)) # [2, 6]
这里解释了当axis=0和axis=1的情况,怎么理解这个axis呢?其实这和numpy中的np.concatenate()用法是一样的。
axis=0 代表在第0个维度拼接
axis=1 代表在第1个维度拼接