warm up (前两个符号介绍为热身)
flags
flags的用法:
# filename:test.py
import tensorflow as tf
tf.flags.DEFINE_string("train_image_dir","/tmp/train2014","Training image direct
ory")
FLAGS = tf.flags.FLAGS
print(FLAGS.train_image_dir)
输出是
/tmp/train2014
一般来讲这就是定义变量,但是tensorflow有一个好处就是很方便,比如执行下面的命令
python test.py --train_image_dir="./train2014"
输出是
./train2014
placeholder
tf.placeholder(dtype, shape=None, name=None)
此函数可以理解为形参,用于定义过程,在执行的时候再赋具体的值
参数:
dtype:数据类型。常用的是tf.float32,tf.float64等数值类型
shape:数据形状。默认是None,就是一维值,也可以是多维,比如[2,3], [None, 3]表示列是3,行不定
name:名称。
-------------------------------分割线----------------------------------
x = tf.placeholder(tf.float32, shape=(1024, 1024))
y = tf.matmul(x, x)
with tf.Session() as sess:
print(sess.run(y)) # ERROR: 此处x还没有赋值.
rand_array = np.random.rand(1024, 1024)
print(sess.run(y, feed_dict={x: rand_array})) # Will succeed.
返回:Tensor 类型
入门tensorflow
tensorflow tutorial这个讲的很好,cs224d的老师讲的。
tensorflow总是定义一个计算图,在计算(eval)之前,每个tensor里面是没有真实值的,这和numpy是有区别的。
a = tf.constant(5.0)
b = tf.contant(6.0)
c=a*b
with tf.Session() as sess:
print(sess.run(c))
print(c.eval()) #这里的eval只是上一句的语法糖,执行效果一样
不run就不会有值
tf.InteractiveSession()
一个用于ipython的长期保持环境的语法糖
tf.Session()
这个是tensorflow中最重要的,没有会话就没有计算
tf.convert_to_tensor()
用于转换numpy或是别的数据到tensor
placeholder
这个提供一个假的数据输入点,结合feed_dict输入数据
input1 = tf.placeholder(tf.float32)
input2 = tf.placeholder(tf.float32)
output = tf.mul(input1,input2)
with tf.Session() as sess:
print(sess.run([output],feed_dict={input1:[7.],input2:[4.]}))
tf.variable_scope()
因为一个大型的网络有很多很多的变量,所以有个这个变量域,用于防止冲突。
tf.get_variable()用于在这个变量域中提取变量
很奇妙的是在tensorflow中不同域的变量的命名方式是一样的,用'/'隔开
with tf.variable_scope("foo"):
with tf.variable_scope("bar"):
v = tf.get_variable("v",[1])
assert v.name == "foo/bar/v:0"
reuse_variables()重复使用变量,一旦你get之后就需要使用这个函数才能重复使用
或者如下
with tf.variable_scope("foo",reuse=True)
做个 Linear Regression 的 test
用线性函数拟合上面的函数
可以先不看下面的代码,试着想想应该怎么去写
代码:
n_samples =1000
batch_size = 100
# Tensorflow is finicky about shapes,so resize
X_data = np.reshape(X_data,(n_samples,1))
Y_data = np.reshape(Y_data,(n_samples,1))
# Define placeholders for input
X = tf.placeholder(tf.float32,shape=(batch_size,1))
Y = tf.placeholder(tf.float32,shape=(batch_size,1))
# define variable to be learned
with tf.variable_scope("linear-regression"):
W = tf.get_variable("weights",(1,1),initializer=tf.random_normal_initializer())
b = tf.get_variable("bias",(1,),initializer=tf.constant_initializer(0.0,0.0))
y_pred = tf.matmul(X,W)+b
loss = tf.reduce_sum(y - y_pred)**2/n_samples)
# Sample code to run full graient descent:
# Define optimizer operation
opt_operation = tf.train.AdamOptimizer().minimize(loss)
with tf.Session() as sess:
# Initiaalize Variables in graph
sess.run(tf.initialize_all_variables())
# Gradient descent loop for 500 steps
for _ in range(500):
# Select random minibatch
indices = np.random.choice(n_samples,batch_size)
X_batch,y_batch = X_data[indices],y_data[indices]
# Do gradient descent step
_, loss_val = sess.run([opt_operation,loss],feed_dict={x:X_batch,y:Y_batch})
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。