张量数组和形状
c = tf.constant([[1,2,3],[4,5,6]])
print("python list {}".format(c.get_shape()))
python list (2, 3)
首先我们介绍 TensorFlow 中两个重要对象变量和占位符。
变量
有关过程就是不断地调整给定模型的参数,为此 TensorFlow 将变量定义为对象,这与我们熟悉的变量有所不同。在 TensorFlow 中变量是承载和更新参数(如权重)的对象。
使用变量分为两个阶段使用tf.Variable()
声明(创建)变量,然后还需要对变量进行初始化,初始化过程是为变量分配变量并为其赋值。
import tensorflow as tf
init_val = tf.random_normal((1, 3), 0, 1)
将一个一维数组,数组元素是在 -1 到 1 间随机变量
var = tf.Variable(init_val, name="var")
print("pre run \n {}".format(var))
使用 Variable 来定义变量,这时只是变量将要被给上的初始值,这时候并没有给变量分配内存和初始化初值,直到调用 tf.global_variables_initializer() 方法才为变量分配变量和赋值。
init = tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init)
post_var = sess.run(var)
print("\n post run: \n{}".format(post_var))
pre run
<tf.Variable 'var:0' shape=(1, 3) dtype=float32_ref>
post run:
[[-0.7185773 -2.401612 0.666178 ]]
d = tf.constant(np.array(
[
[[1,3,3],[2,3,3]],
[[2,6,7],[2,3,2]]
]
))
print("pyton Numpy array {}".format(d.get_shape()))
占位符
所谓占位符在运算中用临时值来填充一些以后被实际数据代替位置,当
a = 3
b = 2
x = tf.placeholder(tf.float32,shape=(a,b))
y = tf.add(x,x)
data = np.random.rand(a,b)
sess = tf.Session()
print(sess.run(y,feed_dict={x:data}))
shape 作为占位符的可选参数定义占位符的形状,默认值是None,当我们定义一个占位符时,就必须给输入值,否则将抛出异常。
[[1.201108 0.45492122]
[0.34809026 0.6927605 ]
[1.9980657 1.4801023 ]]
举个栗子
x_data = np.random.randn(5,10)
w_data = np.random.randn(10,1)
with tf.Graph().as_default():
x = tf.placeholder(tf.float32,shape=(5,10))
w = tf.placeholder(tf.float32,shape=(10,1))
b = tf.fill((5,1),-1.)
xw = tf.matmul(x,w)
xwb = xw + b
s = tf.reduce_max(xwb)
with tf.Session() as sess:
outs = sess.run(s,feed_dict={x:x_data,w:w_data})
print("outs = {}".format(outs))
outs = 2.72071838379
网友评论