Tensorflow进阶(一)

Tensorflow进阶(一)

记录,成为更好的自己

1.图

2.会话

3.张量

4.变量

5.模型保存和加载

6.自定义命令行参数


1. 图

不管写什么程序,都要先把图建好,写Python程序也是一样的,把业务逻辑理好,再写程序。

  • 图默认已经注册好了,定义一张图,相当于是给程序分配内存。
  • 图的创建,使用:tf.Gragh()。图中包含了一组op(操作)和tensor(张量)。
    1. op:使用tensorflow的API定义的函数都是op
    2. tensor:就是指代数据,计算的时候都是使用的tensor,op相当于一个载体。
    3. 使用新创建的图
      g=tf.Graph()
      with g.as_default():
          a=tf.constant(1.0)
      
    • 获取资源
      1. tf.get_default_graph()
      2. op、sess或者tensor的graph属性。

2. 会话

  • tensorflow分为前端系统和后端系统

    1. 前端系统:定义程序的图的结构
    2. 后端系统:运算图结构
  • 会话:相当于是一个桥梁,连接前端和后端

    • 作用:
      1. 运行图结构
      2. 分配资源计算
      3. 掌握资源(变量的资源,队列,线程(都是多线程,得益于使用的numpy))
  • tf.Session(graph=指定的图),一次只能运行一张图。使用默认注册的图(可以指定)

    1. sess=tf.sess()

    sess.run()启动整个图。
    会话可能有很多资源,因此,会话结束后要释放资源。

    sess.close()关闭整个图。
    2. 使用上下文管理器,会自动释放。
    with tf.Session() as sess: sess.run(.....)
    config=tf.ConfigProto(log_device_placement=True)这张图中的所有资源。

  • 交互式的,一般用于命令行。
    tf.InteractiveSession()

    import tensorflow as tf
    a=tf.constant(3.0)
    tf.InteractiveSession()
    a.eval()//打印出a的值,只要有上下文环境,就可以使用eval。
    
  • 会话的run方法

    run(fetches, feed_dict=None, graph=None)

    • 用于运行ops和计算tensor
    1. 嵌套的列表,元组。
      • 如sess.run([a, b, sum1])
    2. feed_dict允许调用者覆盖图中指定张量的值,提供给placeholder使用
      • placeholder是占位符,用于实时训练数据,run的时候通过feed_dict指定数据。
      plt = tf.placeholder(dtype, shape=[None, 3])//不指定行数,3列
      sess.run(plt, feed_dict={plt : [[1,2,3],[4,5,,6]]})
      
  • 返回值异常
    RuntimeError:如果它Session处于无效状态(已关闭)
    TypeError:如果fetches或feed_dict键是不合适的类型
    ValueError:如果fetches或feed_dict键无效或引用Tensor不存在。

3.张量

  1. 张量的阶和数据类型

    张量类似于Numpy,tensorflow依赖了numpy,对numpy进行了封装,类型为tensor。其实就是数组,只不过把名字改了。

    • 一个类型化的N维度数组。
    • Tensor类型由3部分组成,名字(op的名字,如add),形状,数据类型。
      张量的维度成为阶
    数学实例Python例子
    0纯量(只有大小)s=483
    1向量(大小和方向)v=[1,2,3]
    2矩阵(数据表)m=[[1,2,3],[4,5,6]]
    33阶张量(数据立体)t=[[],[],[]]
    nn阶(自己想)

    张量的数据类型,跟平常的数据类型查不多

    数据类型python类型描述
    DT_FLOATtf.float3232位浮点数
    DT_DOUBLEtf.float6464位浮点数
    DT_INT64

    张量的属性

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

    形状的改变

    • 静态形状

      创建一个张量或者有操作推导出一个张量是,初始的形状

      • tf.get_shape:获取静态形状
      • tf.set_shape:更行Tensor对象的静态形状
      plt = tf.placeholder(tf.float32, [None, 3])
      plt.set_shape([2,3])
      print(plt)
      

      对于静态形状来说,一旦张量形状固定了,不能再次设置静态形状, 不能夸维度修改

    • 动态形状

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

      plt = tf.placeholder(tf.float32, [None, 3])
      plt_reshape = tf.reshape(plt, [3,3])
      print(plt_reshape)
      

      动态形状可以去创建一个新的张量,改变时候一定要注意元素数量要匹配,可以跨维度

    • 区别

      有没有生成一个新的张量数据

  2. 张量操作

  • 生成张量
    • 固定张量值
      1. 创建所有元素为0的张量

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

      2. 创建所有元素为1的张量

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

      3. 创建一个填充了标量值的张量

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

    • 创建随机张量
      • 从正态分布中输出随机值,由随机正态分布的数字组成的矩阵,mean为均值,seddev为方差。

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

  • 改变类型
    • tf.string_to_number(string_tensor, out_type=None,name=None)
    • tf.cast(x,dtye,name=None)
  • 切片与扩展
    • tf.concat(values, axis, name=‘Concat’)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值