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

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

TF Girls 修炼指南学习笔记(1)_第1张图片
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 用来运行一个计算图谱

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

TF Girls 修炼指南学习笔记(1)_第2张图片
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))