本文简单介绍了一下Tensorflow中的placeholder的使用方法。(由于本人最近刚刚接触Tensorflow,对其中的概念若有解释错误,还请不吝指出。)
import tensorflow as tf
#Tensorflow默认会话
sess = tf.InteractiveSession()
#建立两个矩阵变量w1和w2
#tf.random_normal(shape,
# mean=0.0,
# stddev=1.0,
# dtype=dtypes.float32,
# seed=None,
# name=None)
#产生随机正态分布
#shape表示矩阵的维度,例如:
#tf.random_normal([2,3],mean=1.0, stddev=1.0)是一个2行3列的矩阵,
#mean表示均值,默认为0.0,stddev表示标准差,默认为1.0
w1 = tf.Variable(tf.random_normal([2,3],mean=1.0, stddev=1.0))
w2 = tf.Variable(tf.random_normal([3,1],mean=1.0, stddev=1.0))
#定义一个placeholder,用于保存相应的数据。
#placeholder(dtype, shape=None, name=None)
#dtype:表示需要存放的数据的类型,一般可以使用tf.float32
#shape:表示需要存放的数据的大小结构,简单可以理解为是一个多维数组,默认为None,可以不指定,根据实际需要,大小会自动调整。
#name:名称,默认为None
#在这里只是定义了这个placeholder的结构,并没有对其进行赋值(feed)操作。
x = tf.placeholder(dtype=tf.float32,shape=[1,2],name="input")
#初始化全局变量,这里由于只有w1和w2没有被初始化(之前只是定义了w1和w2的tensor,并没有被初始化)
tf.global_variables_initializer().run()
#tf.initialize_all_variables().run() #这种写法也可,官方推荐使用上面的写法
#计算矩阵相乘a=x*w1(关于矩阵乘法,可以参看线性代数)
a = tf.matmul(x ,w1)
#计算矩阵相乘y=a*w2
y = tf.matmul(a, w2)
#输出计算结果,是一个1行1列的二维矩阵
#在这之前,我们都只是定义了Tensorflow中的Graph的结构,并没有真的去执行这个Graph。
#现在,通过feed_dict参数,传入一个1行2列的矩阵,并将这个矩阵赋值给x。
#由于y的计算依赖于x的取值,因此必须使用feed_dict参数(该参数本质上是一个Python字典)。
#最后在默认会话下执行run方法,计算y的值,并输出。
#run方法返回的是最后的计算结果,在这里是一个1行1列的二维矩阵。
print(sess.run(y,feed_dict={x:[[0.7,0.9]]}))
print(y)
#使用下列语句会出现错误
#print(y.eval())
输出结果如下:(不同的机器运行结果会不同)
[[ 0.6891433]]
Tensor("MatMul_1:0", shape=(1, 1), dtype=float32)
我们也可以不指定placeholder的大小,其大小会根据实际情况确定。
import tensorflow as tf
#Tensorflow默认会话
sess = tf.InteractiveSession()
w1 = tf.Variable(tf.random_normal([2,3],mean=1.0, stddev=1.0))
w2 = tf.Variable(tf.random_normal([3,1],mean=1.0, stddev=1.0))
#定义一个placeholder,用于保存相应的数据。
#placeholder(dtype, shape=None, name=None)
#dtype:表示需要存放的数据的类型,一般可以使用tf.float32
#shape:表示需要存放的数据的大小结构,简单可以理解为是一个多维数组,默认为None,可以不指定,根据实际需要,大小会自动调整。
#name:名称,默认为None
#在这里只是定义了这个placeholder的结构,并没有对其进行赋值(feed)操作。
#注意:这里并没有指定这个placeholder的大小。
x = tf.placeholder(dtype=tf.float32,name="input")
#初始化全局变量,这里由于只有w1和w2没有被初始化(之前只是定义了w1和w2的tensor,并没有被初始化)
tf.global_variables_initializer().run()
#tf.initialize_all_variables().run() #这种写法也可,官方推荐使用上面的写法
#计算矩阵相乘a=x*w1(关于矩阵乘法,可以参看线性代数)
a = tf.matmul(x ,w1)
#计算矩阵相乘y=a*w2
y = tf.matmul(a, w2)
#输出计算结果,是一个3行1列的二维矩阵
#在这之前,我们都只是定义了Tensorflow中的Graph的结构,并没有真的去执行这个Graph。
#现在,通过feed_dict参数,传入一个3行2列的矩阵,并将这个矩阵赋值给x。
#由于y的计算依赖于x的取值,因此必须使用feed_dict参数(该参数本质上是一个Python字典)。
#最后在默认会话下执行run方法,计算y的值,并输出。
#run方法返回的是最后的计算结果,在这里是一个3行1列的二维矩阵。
print(sess.run(y,feed_dict={x:[[0.7,0.9],[0.8, 0.3],[1.3,2.6]]}))
print(y)
#使用下列语句会出现错误
#print(y.eval())
运行结果如下:
[[-0.6477921 ]
[-0.32123464]
[-1.73718834]]
Tensor("MatMul_1:0", shape=(?, 1), dtype=float32)