TensorFlow (人工智能)

基本用法

  • 构建图

    构建图的第一步是创建原算子。源算子不需要任何输入,例如常量。源算子的输出传递给其他算子做运算
    Python库中,算子构造器的返回值代表被构造出的算子的输出,这些返回值可以传递给其他算子作为输入

  1. 简单实用

     import tensorflow as tf
     #构造器返回值代表常量算子的返回值
     matrix1 = tf.constant([[3., 3.]])
     #创建另外一个常量算子
     matrix2 = tf.constant([[2.],[2.]])
     #进行矩阵运算
     product = tf.matmul(matrix1,matrix2)
     #启动默认图
     sess = tf.Session()
     #触发图中三个算子的执行
     res = sess.run(product)
     print(res)
     #任务完成关闭会话
     sess.close()
    
  2. 会话关闭方式

     with tf.Session() as sess:
     	res = sess.run([product])
    
  3. 实用多个cpu或GPU等

     with tf.Session() as sess:
     	with tf.device("/gpu:1"):
     		....
    

    设备用字符串进行标识。目前支持的设备包括
    a. “/cpu:0”:机器的CPU
    b. “/gpu:0”:机器的第一个GPU
    c. “/gpu:1”:机器的第二个GPU

  • 交互式实用

    为了便于使用诸如IPython之类的Python交互环境,可以使用InteractiveSession代替Session类,使用Tensor.eval()和Operation.run()方法代替Session.run()。这样可以避免使用一个变量来持有会话。

      import tensorflow as tf
      sess = tf.InteractiveSession()
      x = tf.Variable([1,2])
      a = tf.constant([3,3])
      x.initializer.run()
      ad = tf.add(x,a)
      print(ad.eval())
    
  • 常量

  1. tf.constant创建常量

     #原型:tf.constant(value,dtype=None,shape=None,name='Const',verify_shape=False)
     #直接使用numpy进行赋值
     import tensorflow as tf
     import numpy as np
     tensor = tf.constant(np.arange(12).reshape((2,6)))
     #使用tensorflow自带的方法
     tensor = tf.constant([1,2,3,3],shape=(2,2),name='matric')
     tensor = tf.constant([[1,2],[3,3]]name='matric')
    
  2. tf.zeros创建常量

     tensor = tf.zeros((2,3),dtype=tf.float32,name=None)
     tensor = tf.ones((2,3),dtype=tf.float32,name=None)
    
  3. 递增序列创建常量

     tensor=tf.linspace(start=1.,stop=10.,num=10,name=None)
     tensor=tf.range(10,delta=2,name=None)
     tensor=tf.range(1,10,delta=2)
    
  4. 使用特殊分布常量

     tf.random_normal(shape,mean = 0,stddev = 1,dtype = tf.float32,seed = None,name = None)
     tf.truncated_normal(shape,mean = 0,stddev = 1,dtype = tf.float32,seed = None,name = None)
     tf.random_uniform(shape,minval = 0.0,maxval = 1.0,dtype = tf.float32,seed = None):这个函数生成从0到1中平均分布的数值。   
     tf.random_shuffle(value,seed = None,name = None):传入一个tensor,然后将这个rensor进行随机洗牌。
    
  • 变量
  1. 创建

    变量维护图执行过程中的状态信息,其必须先进行初始化才能使用,变量也可以进行分享和保存,变量部分主要有新建、初始化、保存与读取、分享、更新等几个部分

    两个常用的创建方法如下:

     a.tf.Variable(initial_value=None, trainable=True, collections=None,validate_shape=True, caching_device=None, name=None, variable_def=None, dtype=None, expected_shape=None, import_scope=None)
     b. tf.get_variable(name, shape=None, dtype=None, initializer=None, regularizer=None, trainable=True, collections=None, caching_device=None, partitioner=None, validate_shape=True, custom_getter=None)
    

    以下示例说明了两个方法的差异

     w_1 = tf.Variable(3,name="w_1")
     w_2 = tf.Variable(1,name="w_1")
     print(w_1.name)
     print(w_2.name)
     ##输出为:w_1:0与w_1_1:0
     w_1 = tf.get_variable(name="w_1",initializer=1)
     w_2 = tf.get_variable(name="w_1",initializer=2)
     ##此处报错
     with tf.variable_scope("scope1"):
     w1 = tf.get_variable("w1", shape=[])
     w2 = tf.Variable(0.0, name="w2")
     with tf.variable_scope("scope1", reuse=True):
         w1_p = tf.get_variable("w1", shape=[])
         w2_p = tf.Variable(1.0, name="w2")
     print(w1 is w1_p, w2 is w2_p)
     ##输出:True False
    
  2. 初始化

    tensorflow中所有的变量在架构的时候都是一个框架,并没有具体的值,在初始化之后才有了具体的值。主要的初始化器如下:

    1)tf.variables_initilizer(var_list,name = “nint”) :对指定的一个变量列表进行初始化
    2)tf.global_variables_initializer() :对所有的变量进行初始化。
    3)tf.gloable_variables() :显示图中所有的变量,包括可训练的和不可训练的变量。
    4)tf.trainable_variables() :显示图中可训练的变量,除非创建变量时指定trainable=False,否则均为可训练的。返回的结果是一个变量的列表,变量名是在定义变量的时候命名的名字:name=xxx。如果定义变量时没有显示命名,那么列表中的变量名为:Variable:0 Variable_1:0 Variable_2:0 …………
    5)tf.assert_variables_initialized(var_list) 判断传入的变量列表是否已经初始化,如果还有没初始化的,就报错。

    注意:这里的初始化只是在计算图中定义了这样的一个节点,这个节点的运算是将变量进行初始化,所以在实际计算中,还是要调用seee.run(initializer),才能真正的完成初始化过程。

深度学习使用

  • 基本使用
  1. 导入模块

     import tensorflow as tf
     import numpy as np
     import matplotlib.pyplot as plt
    
  2. 输入与输出

     x_data = np.linspace(-0.5,0.5,200).reshape((-1,1))
     noise = np.random.normal(0,0.02,x_data.shape)
     y_data = np.square(x_data)+noise
     x = tf.placeholder(tf.float32,[None,1])
     y = tf.placeholder(tf.float32,[None,1])
     Weight_L1 = tf.Variable(tf.random.normal([1,10]))
     baise_L1 = tf.Variable(tf.zeros([1,10]))
     Wx_plus_b_L1 = tf.matmul(x,Weight_L1)+baise_L1
     L1 = tf.nn.tanh(Wx_plus_b_L1)
     Weight_L2 = tf.Variable(tf.random_normal([10,1]))
     baise_L2 = tf.Variable(tf.zeros([1,1]))
     Wx_plut_b_L2 = tf.matmul(L1,Weight_L2)+baise_L2
    
  3. 优化器

     predition = tf.nn.tanh(Wx_plut_b_L2)
     loss = tf.reduce_mean(tf.square(y-predition))
     train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)
    
  4. 运行代码

     with tf.Session() as sess:
     sess.run(tf.global_variables_initializer())
     for _ in range(3000):
         sess.run(train_step,feed_dict={x:x_data,y:y_data})
         
     predition_value = sess.run(predition,feed_dict={x:x_data})
     plt.figure()
     plt.scatter(x_data,y_data)
     plt.plot(x_data,predition_value)
    

你可能感兴趣的:(TensorFlow (人工智能))