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})
        

jasperyang
203 声望58 粉丝

Highest purpose is Hacking...