美文网首页
TF Girls 修炼指南学习笔记(1)

TF Girls 修炼指南学习笔记(1)

作者: 小双2510 | 来源:发表于2017-06-05 09:23 被阅读0次

    开始在B站上学习TensorFlow, 这个系列大概长这样。

    Screen Shot 2017-06-05 at 9.40.36 AM.png

    这个repo提供了代码,ppt,以及视屏的链接:
    https://github.com/glossary95/TensorFlow-Tutorial

    这篇笔记是1-3的内容,这部分讲了一点基本的小语法,作为正式开始机器学习之前的准备。下面逐段讲解该部分的代码示例:

    1.先引入几个基本概念:

    import tensorflow as tf
    
    print('Load TV version',tf._version_)
    
    #Tensor 在数学中是“张量”
    #标量,矢量\向量,张量
    
    #简单地理解
    #标量表示值
    #矢量表示位置(空间中的一个点)
    #张量表示整个空间
    
    #一维数组是矢量
    #多维数组是张量,矩阵也是张量
    
    #4个重要的类型
    #@Variable 计算图谱中的变量
    #@Tensor 一个多维矩阵,带有很多方法
    #@Graph 一个计算图谱
    #@Session 用来运行一个计算图谱
    

    计算图谱呢,官网提供的长这样,先有一个粗略认识:

    Screen Shot 2017-06-02 at 9.02.08 AM.png

    2. 三个重要的函数: tf.func_name

    #三个重要的函数
    
    #Variable 变量 
    #以下是变量这个类的constructor
    #tf.Variable.__init__(
    #    initial_value=None,@Tensor
    #    traibale=True,
    #    collections=None,
    #    validate_shape=True,
    #    caching_device=None,
    #    name=None,
    #    variable_def=None
    #    dtype=None
    #)
    #注意: Variable 是一个Class,Tensor也是一个Class
    
    #Constant 常数
    # tf.constant(value,dtype=None,shape=None,name='Const')
    # return : a constant @Tensor
    
    #Placeholder 暂时变量?
    #tf.placeholder(dtype,shape=None,name=None)
    #return :一个还尚未存在的 @Tensor
    

    注意: tf.constant和tf.placeholder返回的都是一个张量tensor
    下面实现一个四则运算的函数 basic_operation():
    变量 + 变量 = 张量(addv)
    常量就是一个张量,常量 + 常量 = 张量
    运行session,初始化所有的 变量
    张量.eval(session = my_session_name)与my_session_name.run(张量)等价。
    在with tf.Session(graph=graph) as mySess:这个代码块里,该写session=sess的地方,都可以省略,比如run(),比如eval()。因为这个块里面,使用的就是mySess。

    def basic_operation():
        v1 = tf.Variable(10)
        v2 = tf.Variable(5)
        addv = v1 + v2
        print(addv)
        print(type(addv))  //Tensor
        print(type(v1))    //Variable
        
        c1 = tf.constant(10)
        c2 = tf.constant(5)
        addc = c1 + c2
        print(addc)
        print(type(addc)) //Tensor
        print(type(c1))     //Tensor
        
        #用来运行计算图谱的对象\实例?
        #session is a runtime
        sess = tf.Session();
        
        #Variable ->初始化 ->有值的Tensor
        tf.initialize_all_varibales().run(session=sess)
        print('变量是需要初始化的')
        #以下两行的作用是一样的:在session下算出addv的值
        print('加法(v1,v2)=',addv.eval(session=sess))
        print('加法(v1,v2)=',sess.run(addv)) 
        print('加法(c1,c2)=',addc.eval(session=sess))
        
        #上面的一切,可以改写成这样:
        #有一个图,里面有一些数据,然后有一个针对这个图的session
        #tf.Graph.__init__()
        #Creates a new empty Graph
        graph = tf.Graph()
        with graph.as_default():
            value1 = tf.constant([1,2])
            value2 = tf.Variable([3,4])
            mul = value1 * value2
            mul2 =  value1 / value2
            
        with tf.Session(graph=graph) as mySess:
            tf.initialize_all_variables().run()
            print('一一对应乘法(value1,value2)=',mySess.run(mul))
            print('一一对应乘法(value1,value2)=',mul.eval())
            print('一一对应的除法(value1, value2) = ', mySess.run(mul2))
        print('一一对应的除法(value1, value2) = ', mul2.eval())
        # tensor.eval(session=sess)
        # sess.run(tensor)
    

    3. Placeholder很重要

      # 省内存?placeholder才是王道
    # def use_placeholder():
        graph = tf.Graph()
        with graph.as_default():
            value1 = tf.placeholder(dtype=tf.float64)
            value2 = tf.Variable([3, 4], dtype=tf.float64)
            mul = value1 * value2
    
        with tf.Session(graph=graph) as mySess:
            tf.initialize_all_variables().run()
            # 我们想象一下这个数据是从远程加载进来的
            # 文件,网络
            # 假装是 10 GB
            value = load_from_remote()
            for partialValue in load_partial(value, 2):
                # runResult = mySess.run(mul, feed_dict={value1: partialValue})
                evalResult = mul.eval(feed_dict={value1: partialValue})
                print('乘法(value1, value2) = ', runResult)
            # cross validation
    
    def load_from_remote():
        return [-x for x in range(1000)]
    
    
    # 自定义的 Iterator
    # yield, generator function
    def load_partial(value, step):
        index = 0
    

    相关文章

      网友评论

          本文标题:TF Girls 修炼指南学习笔记(1)

          本文链接:https://www.haomeiwen.com/subject/hwfifxtx.html