TensorFlow框架实战学习

Posted tiemuer

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TensorFlow框架实战学习相关的知识,希望对你有一定的参考价值。

 1 import tensorflow as tf 
 2 import numpy as np 
 3 import matplotlib.pyplot as plt
 4 
 5 
 6 train_X = np.linspace(-1, 1, 1000);
 7 train_Y = 2 * train_X + np.random.randn(*train_X.shape)*0.3
 8 
 9 plt.plot(train_X,train_Y,ro,label = Original data)
10 plt.legend()
11 #plt.show()
12 
13 X = tf.placeholder("float")
14 Y = tf.placeholder("float")
15 
16 W = tf.Variable(tf.random_normal([1]),name = "weight")
17 b = tf.Variable(tf.zeros([1]),name = "bias")
18 
19 z = tf.multiply(X,W)+b
20 
21 #评估结果,利用梯度下降来反馈结果
22 cost = tf.reduce_mean(tf.square(Y - z))
23 learning_rate = 0.01 
24 optimizier = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost)
25 
26 
27 init = tf.global_variables_initializer()
28 
29 training_epochs = 30
30 display_step = 2
31 
32 #session 
33 
34 with tf.Session() as sess:
35     sess.run(init)
36     plotdata = {"batchsize":[],"loss":[]}
37     for epoch in range(training_epochs):
38         for (x,y) in zip(train_X,train_Y):
39             sess.run(optimizier,feed_dict = {X : x,Y : y})
40 
41 
42         if epoch % display_step == 0:
43             loss = sess.run(cost,feed_dict = {X:train_X,Y:train_Y})
44             print("Epoch:",epoch+1,"cost=",loss,"W=",sess.run(W),"b=",sess.run(b))
45             if not (loss == "NA"):
46                 plotdata["batchsize"].append(epoch)
47                 plotdata["loss"].append(loss)
48 
49     print(" Finished!")
50     print ("cost = ",sess.run(cost,feed_dict = {X : train_X , Y : train_Y}),"W = ", sess.run(W),"b = ",sess.run(b))

 代码主要是对给定的 y ≈ 2x 进行学习,模拟出合适的权值w和偏执值b。


 

下面记录一下各种函数的作用,有助于本人学习记忆python库和函数:

1.首先是linspace函数:numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)

  返回(start,stop)间的num个数,endpoint为真sample必然有终点,为否必然没有终点,retstep表示一定步长,最后返回(sample,step)

2.np.random.randn : numpy.random.rand(d0, d1, ..., dn)

  随机产生维度为(d0,d1...,dn)的随机数,从标准正态分布中产生。

  但random.rand(d0,d1...,dn)产生数值取值范围是[0,1)

3.tf.placeholder : tf.placeholder(dtype,shape = None , name = None)

  占位数,可以理解为变量,在需要的时候才去赋值

  dtype 表示数据类型,例如tf.float32,tf.float64,shape表示数组形状,shape = None 表示一维数,还可以shape  =[3,4],shape = [None,4]表示行未定。返回Tensor类型。

4.tf.Variable.int()

 

  tf.Variable.init(initial_value, trainable=True, collections=None, validate_shape=True, name=None)

  参数表引用相关资料:

initial_value 所有可以转换为Tensor的类型 变量的初始值
trainable bool 如果为True,会把它加入到GraphKeys.TRAINABLE_VARIABLES,才能对它使用Optimizer
collections list 指定该图变量的类型、默认为[GraphKeys.GLOBAL_VARIABLES]
validate_shape bool 如果为False,则不进行类型和维度检查
name string 变量的名称,如果没有指定则系统会自动分配一个唯一的值

5.tf.random_normal() : tf.random_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None)

  代码中仅用到shape=[1],表示一维数

6.tf.reduce_mean(input_tensor, reduction_indices=None, keep_dims=False, name=None) 求平均值

  input_tensor:待求值的tensor。

  reduction_indices:在哪一维上求解。

7.tf.train.GrandientDescentOptimizer(learning_rate)

  产生一个规定学习率的优化器:optmizier = tf.train.GrandientDescentOptimizer(learning_rate = 0.01)

  计算梯度并且直接作用于变量上:optimizer.minimize(cost , var_list = <list of variables>)

  optimizer.run()

  计算出梯度:gradients = optimizer.compute_gradients(loss , <list of variables>)

  然后就可以根据自己的需要处理梯度了。

8.tf.global_variables_initializer()初始化所有Tensor变量的状态

  init = tf.global_variables_initializer()

  with tf.Session() as sess:

    sess.run(init)

 

  

 

以上是关于TensorFlow框架实战学习的主要内容,如果未能解决你的问题,请参考以下文章

学习《TensorFlow实战Google深度学习框架 (第2版) 》中文PDF和代码

学习TF:《TensorFlow技术解析与实战》PDF+代码

实现迁徙学习-《Tensorflow 实战Google深度学习框架》代码详解

《TensorFlow实战Google深度学习框架 (第2版) 》中文版PDF和源代码

TensorFlow实战-TensorFlow和其他深度学习框架的对比-第2章

《TensorFlow实战Google深度学习框架 (第2版) 》中文版PDF和源代码完整版下载