关于 TensorFlow
TensorFlow是一个采用数据流图,用于数值计算的开源软件库。
在使用sklearn时,我们可以通过导入sklearn包,调用算法训练模型。但是TensorFlow中为了更高效的训练大数据集,采用了数据流图,线程队列,分布式操作,在数据的操作中又引入了图,张量,会话,等概念,具体操作中涉及到了模型保存与加载,读数据,线程,队列,图像操作,数据可视化等。这些其实是为后面算法的运行做铺垫。相比较于sklearn,tensorflow更复杂,功能也更强大,tensorflow的数据流图如下:
在数据流图中:节点(Nodes)表示数学操作(OP),张量(tensor)表示多维数组数据。
会话+图+tensor之间的关系?
举个栗子:我们用电脑玩游戏,先用管理员登录(创建session),再点开游戏(图:计算任务),最后游戏从服务器上读数据(tensor),大致就是这么一个流程。
注意:图在会话中才能被执行,会话中只运行一个图,可以在会话中指定图去运行。会话中tf.Session() 运行tensorflow中的图,使用的是默认注册的图。
会话的使用方法:
1.直接调用run方法,运行会话,结束会话。
import tensorflow as tf
# 创建session
session = tf.Session()
#获取运算结果
session.run()
#关闭会话,释放资源
session.close()
2.使用上下文管理器:
with tf.Session() as sess:
sess.run()
运算重载:在tensorflow中定义的变量是不能在会话中运行的,OP才能在会话中运行,通过一个Tensor类型的数据与一个非Tensor数据混合后转化为Tensor类型的数据。
v1 = 10
a = tf.constant(5.0)
sum2 = v1 + a
with tf.Session() as sess:
print(sess.run(sum2))
sum2.eval()#取值:a.eval()方法,只需要上下文环境
实时数据输入时: placeholder 往往与feed_dict 结合使用,由于输入不确定,所以先占位。
plt = tf.placeholder(tf.float32, [2, 3, 4]) #2张3行4列的表
with tf.Session(config=tf.ConfigProto(log_device_placement=True)) as sess:
print(sess.run(plt, feed_dict={plt: [[1,2,3],[4,5,6]]}))
变量的静态形状与动态形状
静态不能改变维度,动态可以改变维度,但是数据量不可以变大。
# 静态形状
plt = tf.placeholder(tf.float32, [None, 2])
print(plt)
plt.set_shape([3, 2]) #变成静态形状了,形状不能再次修改
print(plt)
print("--------------------------")
# 对于静态形状来说,一旦张量形状固定了,度能再次设置静态形状
plt.set_shape([4, 2])
# 动态形状
# 动态形状可以创建一个新的张量
plt1 = tf.placeholder(tf.float32, [3, 2])
print(plt1)
# 改变一定要要注意元素数量要匹配, 例如:【2,3】==》【3,2】
plr_reshape = tf.reshape(plt1, [2, 3])
print(plr_reshape)
使用技巧:查看导入数据的张量
x = tf.constant(data)
print("x:\n", x)