机器学习 tensorflow 基本原理和操作

关于 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)

猜你喜欢

转载自blog.csdn.net/Rand_C/article/details/85793515
今日推荐