TensorFlow(一)

一  基本概念:

  

Tensorflow是一个计算密集型的编程系统,使用图(graphs)来表示计算任务,图(graphs)中的节点称之为op(operation),一个op获得0个或多个Tensor,执行计算,产生0个或多个Tensor。 Tensor 看作是一个 n 维的数组或列表。图必须在会话(Session)里被启动

使用图(graphs)来表示计算任务
在被称之为会话(Session)的上下文(context)中执行图
使用tensor表示数据
通过变量(Variable)维护状态
使用feed和fetch可以为任意的操作赋值或者从其中获取数据

Tensorflow结构 

二 安装:

ubantu  py3.5版:

CPU版本:

pip install http://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-1.0.1-cp35-cp35m-linux_x86_64.whl

Windows  在有 安装Anaconda的情况下

CPU版本:

  pip install --upgrade --ignore-installed tensorflow

三  初识tensorflow   (以下内容都基于1.0版本,不同版本会有些差异)

  1、图

  图默认已经注册,一组表示 tf.Operation计算单位的对象和tf.Tensor 表示操作之间流动的数据单元的对象

  获取默认图:

tf.get_default_graph()

  创建新图并使用:

g = tf.Graph()

with g.as_default():#在上下文管理器(with模块)中,g作为默认图  a = tf.constant(1.0)

  2、会话

  运行TensorFlow操作图的类,使用默认注册的图(可以指定运行图)

  会话可能拥有很多资源,如 tf.Variable,tf.QueueBase 和tf.ReaderBase,会话结束后需要进行资源释放(可以用with上下文管理器实现)

  会话运行后返回值异常:     RuntimeError:如果它Session处于无效状态(例如已关闭)。

             TypeError:如果fetches或feed_dict键是不合适的类型。

              ValueError:如果fetches或feed_dict键无效或引用 Tensor不存在

  Tensorflow 中Feed操作(占位):

    意义:在程序执行的时候,不确定输入的是什么,提前“占个坑”

    语法:placeholder提供占位符,run时候通过feed_dict指定参数

    例:

import tensorflow as tf
val1 = tf.placeholder(tf.float32)
val2 = tf.placeholder(tf.float32)
sum = tf.add(val1, val2)
with tf.Session() as sess:
    print(sess.run(sum,feed_dict={val1:1.0, val2:2.0}))

  3、张量

    张量是Tensorflow基本的数据格式, 有三部分:形状,数据类型,名字

    张量的阶:

    

    张量的数据类型:

    

    张量的属性:  graph(张量所属的默认图)    op(张量的操作名)    name(张量的字符串描述)   shape(张量形状)

    张量的动态形状与静态形状:

    静态形状: 创建一个张量或者由操作推导出一个张量时,初始状态的形状

     tf.Tensor.get_shape:获取静态形状

     tf.Tensor.set_shape():更新Tensor对象的静态形状,通常用于在不能直接推 断的情况下

    注意:

      1、转换静态形状的时候,遵循1-D到1-D,2-D到2-D的规则,不能跨阶数改变形状

      2、 对于已经固定或者设置静态形状的张量/变量,不能再次设置静态形状

    动态形状: 一种描述原始张量在执行过程中的一种形状

    tf.reshape:改变原来的形状创建一个具有不同动态形状的新张量

    注意:

      1、tf.reshape()动态创建新张量时,元素个数需要和改变前的个数匹配

    生成张量:

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

    tf.zeros(shape,dtype=tf.float32,name=None)

    tf.ones(shape,dtype=tf.float32,name=None)

    tf.constant(value,dtype=None,shape=None,name="Const")

    ... ...

    详细的可以参考API(中文):http://wiki.jikexueyuan.com/project/tensorflow-zh/api_docs/python/index.html

    张量的转换(常用):

    tf.String_to_number(string_tensor,out_type=None,name=None)

    tf.cast(x, dtype, name=None)

    tf.shape(input, name=None)

    tf.reshape(tensor, shape, name=None)

    ... ...

    张量的拓展:

    tf.concat(values, axis, name=‘concat‘)

  4、变量

      变量也是一种OP,是一种特殊的张量,能够进行存储持久化,它的 值就是张量

    1)、变量的创建

      tf.Variable(initial_value=None,name=None) 创建一个带值initial_value的新变量    name属性表示变量名字

      assign(value) 为变量分配一个新值 返回新值

      eval(session=None) 计算并返回此变量的值

    2)、变量的初始化

      tf.global_variables_initializer()

    3)、变量的作用域

      作用 : 让模型代码更加清晰,作用分明, 在tensorboard中更易阅读

      创建:

      tf.variable_scope(<scope_name>)创建指定名字的 变量作用域

    如: 

with tf.variable_scope("train"):
    ‘‘‘  作用域内的代码  ‘‘‘

  5、可视化学习Tensorboard

    TensorBoard 通过读取 TensorFlow 的数据序列化-events文件来运行

   在程序中加入代码:

      tf.summary.FileWriter(‘路径‘, graph= 想可视化的图)       返回filewriter,写入事件文件到指定目录(最好用绝对路径),以提供给tensorboard使用

   在命令行开启:

       tensorboard --logdir=/tmp/tensorflow/summary/test/

   一般浏览器打开为127.0.0.1:6006

   注:修改程序后,再保存一遍会有新的事件文件,打开默认为最新

   tensorboard中,图的符号意义:

    

   在tensorboard中显示变量的变化:

    1、收集变量: tf.summary.scalar(name=’’,tensor) 收集对于损失函数和准确率 等单值变量,name为变量的名字,tensor为值

          tf.summary.histogram(name=‘’,tensor) 收集高维度的变量参数         

          tf.summary.image(name=‘’,tensor) 收集输入的图片张量能显示图片

    2、合并变量写入事件文件:merged = tf.summary.merge_all()

    3、运行合并:summary = sess.run(merged),每次迭代都需运行

    4、添加:FileWriter.add_summary(summary,i),i表示第几次的值

  6、模型保存和加载

    创建一个Saver对象(假设返回saver,用于模型保存和加载):

      tf.train.Saver(var_list=None,max_to_keep=5)  其中:

        var_list:指定将要保存和还原的变量。它可以作为一个 dict或一个列表传递.

        max_to_keep:指示要保留的最近检查点文件的最大数量。 创建新文件时,会删除较旧的文件。如果无或0,则保留所有 检查点文件。默认为5(即保留最新的5个检查点文件。)

    保存模型:

    saver.save(sess,"保存模型的路径(自己指定目录即可)"

    保存文件格式:checkpoint文件

    加载模型:

    saver.restore(sess,"保存模型的路径(和上面的路径一致)"

  7、自定义命令行参数

    1、tf.app.flags,它支持应用从命令行接收参数,可以用来指定集群配置等.在它下面有各种定义参数的类型:

      DEFINE_string(flag_name, default_value, docstring)

      DEFINE_integer(flag_name, default_value, docstring)

      DEFINE_boolean(flag_name, default_value, docstring)

      DEFINE_float(flag_name, default_value, docstring)

    2、tf.app.flags.,在flags有一个FLAGS标志,它在程序中可以调用到我们 前面具体定义的flag_name

    3、通过tf.app.run()启动main(argv)函数

  8、用以上知识实现一个简单的线性回归案例

def mylinearregression():
    """
    自实现线性回归
    :return: None
    """
    with tf.variable_scope("data"):  #作用域
        # 手动创建训练数据
        # x表示训练数据的特征  有100个样本,1个特征
        X = tf.random_normal([100, 1], mean=0.0, stddev=1.0, name="X")    #生成一组服从标准正太分布的数据
        # y_true表示训练数据的标签,   跟x是线性关系
        y_true = tf.matmul(X, [[0.7]]) + 0.8

    with tf.variable_scope("model"):   #作用域
        # 建立模型
        # 由准备的数据(x是100行1列的数据,y_true也是100行1列的数据)可以看出,权重是 1行1列的数据
        weights = tf.Variable(tf.random_normal([1, 1], mean=0.0, stddev=1.0), name="weights")
        bias = tf.Variable(0.0)
        # 得出预测值
        y_predict = tf.matmul(X, weights) + bias

    with tf.variable_scope("Optimize"):   #作用域
        # 计算真实值与预测值之间的均方误差(损失函数)
        loss = tf.reduce_mean(tf.square(y_true - y_predict))   #tf.square求方差  tf.reduce_mean求均值

        # 梯度下降优化误差,指定学习率,返回一个梯度下降优化器
        train_op = tf.train.GradientDescentOptimizer(0.2).minimize(loss)

    # 收集变量
    tf.summary.scalar("loss", loss)
    tf.summary.scalar("bias", bias)

    tf.summary.histogram("weight", weights)

    # 定义初始化变量OP
    init_op = tf.global_variables_initializer()

    # 定义一个合并变量的OP
    merged = tf.summary.merge_all()

    # 创建一个Saver
    saver = tf.train.Saver()

    # 开启会话
    with tf.Session() as sess:
        # 运行初始化
        sess.run(init_op)

        # 打印一下初始化随机的权重和偏置
        print("随机初始化的权重为%f,偏置为%f" % (weights.eval(), bias.eval()))

        # 创建事件文件
        filewriter = tf.summary.FileWriter("./tmp/summary/test/", graph=sess.graph) #此路径只须指定目录且目录存在

        # 加载模型
        if os.path.exists("./tmp/ckpt/checkpoint"):  #此路径中目录与模型保存的目录一致,文件名固定为checkpoint
            saver.restore(sess, "./tmp/ckpt/regressionmodel")#此路径与模型保存的路径一致

        # 循环优化, 30是指定训练的步数(可更改)
        for i in range(30):
            # 运行优化
            sess.run(train_op)

            # 运行合并结果
            summary = sess.run(merged)

            # 写入变量结果
            filewriter.add_summary(summary, i)

            print("训练第%d次的结果:权重为%f,偏置为%f" % (i, weights.eval(), bias.eval()))
     # 保存模型
        saver.save(sess, "./tmp/ckpt/regressionmodel")#路径中的目录路径须存在,且要指定文件名称
return None 
# 自定义命令行参数
tf.app.flags.DEFINE_string("data_home", "./data/", "训练数据来源")
tf.app.flags.DEFINE_integer("max_step", 10000, "训练步数")

FLAGS = tf.app.flags.FLAGS

def main(argv):
    print(argv)
    print(FLAGS.data_home)
    print(FLAGS.max_step)

if __name__ == "__main__":
    tf.app.run()                        
时间: 2024-10-30 07:37:45

TensorFlow(一)的相关文章

在Win10 Anaconda中安装Tensorflow

有需要的朋友可以参考一下 1.安装Anaconda 下载:https://www.continuum.io/downloads,我用的是Python 3.5 下载完以后,安装. 安装完以后,打开Anaconda Prompt,输入清华的仓库镜像,更新包更快: conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda config --set show_channel_url

Tensorflow 梯度下降实例

# coding: utf-8 # #### 假设我们要最小化函数 $y=x^2$, 选择初始点 $x_0=5$ # #### 1. 学习率为1的时候,x在5和-5之间震荡. # In[1]: import tensorflow as tf TRAINING_STEPS = 10 LEARNING_RATE = 1 x = tf.Variable(tf.constant(5, dtype=tf.float32), name="x") y = tf.square(x) train_op

Ubuntu16.04安装tensorflow+安装opencv+安装openslide+安装搜狗输入法

Ubuntu16.04在cuda以及cudnn安装好之后,安装tensorflow,tensorflow以及opencv可以到网上下载对应的安装包并且直接在安装包所在的路径下直接通过pip与conda进行安装,如下图所示: 前提是要下载好安装包.安装好tensorflow之后还需要进行在~/.bashrc文件中添加系统路径,如下图所示 Openslide是医学图像一个重要的库,这里给出三条命令进行安装 sudo apt-get install openslide-tools sudo apt-g

【tensorflow:Google】三、tensorflow入门

[一]计算图模型 节点是计算,边是数据流, a = tf.constant( [1., 2.] )定义的是节点,节点有属性 a.graph 取得默认计算图 g1 = tf.get_default_graph() 初始化计算图 g1 = tf.Graph() 设置default图 g1.as_default() 定义变量: tf.get_variable('v') 读取变量也是上述函数 对图指定设备 g.device('/gpu:0') 可以定义集合来管理计算图中的资源, 加入集合 tf.add_

TensorFlow之tf.unstack学习循环神经网络中用到!

unstack( value, num=None, axis=0, name='unstack' ) tf.unstack() 将给定的R维张量拆分成R-1维张量 将value根据axis分解成num个张量,返回的值是list类型,如果没有指定num则根据axis推断出! DEMO: import tensorflow as tf a = tf.constant([3,2,4,5,6]) b = tf.constant([1,6,7,8,0]) c = tf.stack([a,b],axis=0

TensorFlow conv2d实现卷积

tf.nn.conv2d是TensorFlow里面实现卷积的函数,参考文档对它的介绍并不是很详细,实际上这是搭建卷积神经网络比较核心的一个方法,非常重要 tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None, name=None) 除去name参数用以指定该操作的name,与方法有关的一共五个参数: 第一个参数input:指需要做卷积的输入图像,它要求是一个Tensor,具有[batch, in_height, i

Tensorflow一些常用基本概念与函数(四)

摘要:本系列主要对tf的一些常用概念与方法进行描述.本文主要针对tensorflow的模型训练Training与测试Testing等相关函数进行讲解.为'Tensorflow一些常用基本概念与函数'系列之四. 1.序言 本文所讲的内容主要为以下列表中相关函数.函数training()通过梯度下降法为最小化损失函数增加了相关的优化操作,在训练过程中,先实例化一个优化函数,比如 tf.train.GradientDescentOptimizer,并基于一定的学习率进行梯度优化训练: optimize

Tensorflow一些常用基本概念与函数(三)

摘要:本系列主要对tf的一些常用概念与方法进行描述.本文主要针对tensorflow的数据IO.图的运行等相关函数进行讲解.为'Tensorflow一些常用基本概念与函数'系列之三. 1.序言 本文所讲的内容主要为以下相关函数: 操作组 操作 Data IO (Python functions) TFRecordWrite,rtf_record_iterator Running Graphs Session management,Error classes 2.tf函数 2.1 数据IO {Da

TensorFlow【机器学习】:如何正确的掌握Google深度学习框架TensorFlow(第二代分布式机器学习系统)?

本文标签:   机器学习 TensorFlow Google深度学习框架 分布式机器学习 唐源 VGG REST   服务器 自 2015 年底开源到如今更快.更灵活.更方便的 1.0 版本正式发布,由 Google 推出的第二代分布式机器学习系统 TensorFlow一直在为我们带来惊喜,一方面是技术层面持续的迭代演进,从分布式版本.服务框架 TensorFlow Serving.上层封装 TF.Learn 到 Windows 支持.JIT 编译器 XLA.动态计算图框架 Fold 等,以及

机器学习进阶笔记之一 | TensorFlow安装与入门

原文链接:https://zhuanlan.zhihu.com/p/22410917 TensorFlow 是 Google 基于 DistBelief 进行研发的第二代人工智能学习系统,被广泛用于语音识别或图像识别等多项机器深度学习领域.其命名来源于本身的运行原理.Tensor(张量)意味着 N 维数组,Flow(流)意味着基于数据流图的计算,TensorFlow 代表着张量从图象的一端流动到另一端计算过程,是将复杂的数据结构传输至人工智能神经网中进行分析和处理的过程. -- 由 UCloud