Tensorflow基础
一,数据类型
Tensorflow中的基本单位是:图(图表),操作:(OP),会话:(会话),张量(张量),除此之外还有变量:(可变)等数据类型
如图1所示,图(图表):
(1)图是整个计算流程的基本对象,所有的操作都要在图中运行,一般我们使用
G=tf.Graph()
来构建一个图对象
(2)如果你的程序中没有定义图,那么系统会自动构建一个默认的图,从而完成你的所有计算,这个默认图可以通过
tf.get_defalut_graph()
来获取到你默认的图对象
(3)在我们填写图中的元素时,一般用
with G.as_default():
来定义该对象(G)内的元素
2,张量(张量):
(1)张量是Tensorflow中的基本数据类型,所有的数据都以该类型来存储,但张量里记录的不是一个值,而是怎样求出这个值的过程,如果我们想要调用这个值时,需要用相关的运行器来运行这个计算过程,也就是下一小结的会话
(2)常量是我们最常使用的数据存储类型,一般使用
x = tf.constant(initial_value, name, type)
来创建一个常量型的张量,它通常用来存储那些在整个过程中不变的值
initial_value:初始值,名称:标识符,类型:数据类型
(3)变量也是一种张量,一般使用
w = tf.Variable(initial_value, trainable)
来创建变量,它的主要参数有initial_value决定他的初始值,可训练决定该变量是否在训练过程中参与优化,默认值为真时,
另外,在我们对它初始化时,常用
tf.random_normal(initial_vale, stddev, seed)
随机化函数来创建一个随机值或随机矩阵
initial_shape:初始矩阵形状,stddev:标准差,种子:种子值,同样的种子值随机化出来的矩阵是相同的
3,会话(会话):
(1)会话是一种运行器,或者形似一个编译器,因为所有的张量存储的都是运算过程,所以当我们需要调用张量时,我们就需要相应的运行器来运行我们的张量(或者说编译这段代码,当然其实已经编译过了,只是形似),不同的图可以定义不同的会话
(2)一般采用
with tf.Session(graph=G) as sess:
来创建已指定图类型的会话
(3)在采用上述的那种定义来定义会话后,一般使用
sess.run(op)
来运行我们需要运行的语句
如图4所示,操作(OP):
(1)在tensorflow中,会话真正运行的是运算,而不是张量,张量只是一个(过程)这种数据类型,而运算才是真正的我们要运行的对象,举个例子,比如在下列代码中:
init_op = tf.global_variables_initializer()
tf.global_variables返回了当前计算图中的所有变量,而_initializer()方法则是对变量进行初始化,所以这句语句的意思就是将init_op定义为一个将当前计算图中的所有变量都初始化的一个运算,但是如果我们不用相关会话去运行这个运算的话,这个操作是不会运行的,也就是说,只有在我们用.RUN()方法运行过运算后,这个运算的代码才会被执行
5,例子(情况):
以下是一个简单的创建一个单层网络的例子:
import tensorflow as tf
G=tf.Graph()
with G.as_default():
# Variable:变量 stddev:标准差 seed:种子 trainable:是否需要优化
# w:权值矩阵 init_op:初始化w操作
w1 = tf.Variable(tf.random_normal((2, 3), stddev=1, seed=1), trainable=True)
w2 = tf.Variable(tf.random_normal((3, 1), stddev=1, seed=1),trainable=False)
init_op = tf.global_variables_initializer()
# constant:张量
# input:输入向量
input= tf.constant([[0.7, 0.9]])
#matmul:矩阵乘法
#计算流程 calulation
cal1 = tf.matmul(input, w1)
output = tf.matmul(cal1, w2)
with tf.Session(graph=G) as sess:
sess.run(init_op)
print(sess.run(output))