前面介绍过了Tensorflow的基本概念,比如如何使用tensorboard查看计算图。本篇则着重介绍和整理下Constant相关的内容。

基于TensorFlow的深度学习系列教程 1——Hello World!

常量的概念

在tensorflow中,数据分为几种类型: 常量Constant、变量Variable、占位符Placeholder。其中:

  • 常量:用于存储一些不变的数值,在计算图创建的时候,调用初始化方法时,直接保存在计算图中
  • 变量:模型训练的参数,比如全连接里面的W和bias
  • 占位符:就是模型每次训练时的样本,当计算图固定时,只需要替换占位符里面的内容,就可以重新计算了。

概念上跟spark的DAG图差不多,不过图的模式更固定一些,不像spark还分为action和transform。

常量的简单使用

下面这个例子就是常量最简单的使用例子了,定义a和b两个常量,输出x。x=a+b。

  1. import tensorflow as tf
  2. a = tf.constant(2)
  3. b = tf.constant(3)
  4. x = tf.add(a, b)
  5. with tf.Session() as sess:
  6. writer = tf.summary.FileWriter('./graphs', sess.graph)
  7. print(sess.run(x))
  8. writer.close()

得到的计算图如下:

选中constant可以发现,它的值直接写在定义里面了。

常量的初始化

1 固定初始化、0或1初始化

最常用的初始化方法,就是直接在声明的时候赋予一个初始值,也可以根于指定的shape进行0和1的填充

  1. import tensorflow as tf
  2. # tf.constant(value, dtype=None, shape=None, name='Const', verify_shape=False)
  3. # 常量的创建
  4. # [2 2]
  5. a = tf.constant([2, 2], name='vector')
  6. # [[0 1] [2 3]]
  7. b = tf.constant([[0, 1], [2, 3]], name='b')
  8. # 也可以直接初始化成0或者1
  9. # [[0 0 0] [0 0 0]]
  10. zero1 = tf.zeros([2, 3], tf.int32)
  11. # [[0 0] [0 0]]
  12. zero2 = tf.zeros_like([[0, 1], [2, 3]])
  13. # [[1 1 1] [1 1 1]]
  14. one1 = tf.ones([2, 3], tf.int32)
  15. # [[1 1] [1 1]]
  16. one2 = tf.ones_like([[0, 1], [2, 3]])
  17. # 基于填充创建
  18. # [[8 8 8] [8 8 8]]
  19. fill1 = tf.fill([2, 3], 8)
  20. # 基于序列创建
  21. # [10. 11. 12. 13.]
  22. lnspace1 = tf.linspace(10., 13., 4, name='linspace')
  23. # [ 3 7 11 15]
  24. range1 = tf.range(3, 18, 4)
  25. # [ 3 8 13]
  26. range2 = tf.range(3, 18, 5)
  27. # [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17]
  28. range3 = tf.range(18)
  29. with tf.Session() as sess:
  30. print(sess.run(a))
  31. print(sess.run(b))
  32. print(sess.run(zero1))
  33. print(sess.run(zero2))
  34. print(sess.run(one1))
  35. print(sess.run(one2))
  36. print(sess.run(fill1))
  37. print(sess.run(lnspace1))
  38. print(sess.run(range1))
  39. print(sess.run(range2))
  40. print(sess.run(range3))

tensorflow在设计时,尽量模仿numpy,因此很多函数都很类似。不过有一些操作tf中还是无法支持的,比如map:

  1. import tensorflow as tf
  2. import numpy as np
  3. """
  4. 0.0
  5. 3.3333333333333335
  6. 6.666666666666667
  7. 10.0
  8. """
  9. for a in np.linspace(0., 10., 4):
  10. print(a)
  11. """
  12. TypeError: Tensor objects are not iterable when eager execution is not enabled. To iterate over this tensor use tf.map_fn.
  13. """
  14. for a in tf.linspace(0., 10., 4):
  15. print(a)

常量的随机初始化

另一种常用的初始化方法就是指定随机方法进行初始化。

  1. import tensorflow as tf
  2. import cv2
  3. # 初始化服从指定正态分布的数值
  4. # [ 2.3021064 0.4199094 -0.03323628 0.47499242 0.36770386 -0.7848035 -0.70948434 -0.35462353 0.75125676 0.50364155]
  5. r1 = tf.random_normal([10], mean=0.0, stddev=1.0, dtype=tf.float32)
  6. # 产生截断的正态分布,如果与均值差值超过两倍,就重新生成
  7. # [ 1.785729 0.5161861 0.3950558 1.5795906 0.25945508 -1.5349426 -0.00732355 0.14366971 -0.7726713 -0.2694001 ]
  8. r2 = tf.truncated_normal([10])
  9. # 产生low和high之间的均匀分布
  10. # [-0.54088783 -2.957581 1.8622065 -2.7436473 0.8000214 2.087247 2.5148878 -0.19671392 0.9098282 1.6573 ]
  11. r3 = tf.random_uniform([10], minval=-3, maxval=3, dtype=tf.float32)
  12. # 随机打乱
  13. # [4 2 1 5 3]
  14. r4 = tf.random_shuffle([1, 2, 3, 4, 5])
  15. # 随机裁剪,一般用在图像上
  16. # [-1.6676509 -2.3372912 -0.39069057 2.044036 -2.0961857 ]
  17. r5 = tf.random_crop(r3, [5])
  18. # 图片例子
  19. img = cv2.imread('tensorboard.jpg')
  20. cv2.imshow('origin', img)
  21. # 多项式
  22. multinomial1 = tf.multinomial([[0.99], [0.2]], 10)
  23. multinomial2 = tf.multinomial([[0, 0.02, 0.99], [0, 0.99, 0.2]], 10)
  24. # r7 = tf.random_gamma([])
  25. with tf.Session() as sess:
  26. print(sess.run(r1))
  27. print(sess.run(r2))
  28. print(sess.run(r3))
  29. print(sess.run(r4))
  30. print(sess.run(r5))
  31. print(sess.run(multinomial1))
  32. print(sess.run(multinomial2))
  33. img_tf = tf.convert_to_tensor(img)
  34. distorted_image = tf.random_crop(img_tf, [300, 300, 3])
  35. img_np = distorted_image.eval()
  36. cv2.imshow('random', img_np)
  37. cv2.waitKey(0)

里面的random_gamma没见过应用的场景,所以也没有细致的研究。

基于TensorFlow的深度学习系列教程 2——常量Constant的更多相关文章

  1. 基于TensorFlow的深度学习系列教程 1——Hello World!

    最近看到一份不错的深度学习资源--Stanford中的CS20SI:<TensorFlow for Deep Learning Research>,正好跟着学习一下TensorFlow的基 ...

  2. TensorFlow和深度学习入门教程(TensorFlow and deep learning without a PhD)【转】

    本文转载自:https://blog.csdn.net/xummgg/article/details/69214366 前言 上月导师在组会上交我们用tensorflow写深度学习和卷积神经网络,并把 ...

  3. TensorFlow和深度学习新手教程(TensorFlow and deep learning without a PhD)

    前言 上月导师在组会上交我们用tensorflow写深度学习和卷积神经网络.并把其PPT的參考学习资料给了我们, 这是codelabs上的教程:<TensorFlow and deep lear ...

  4. 建设基于TensorFlow的深度学习环境

    一.使用yum安装git 1.查看系统是否已经安装git git --version 2.yum 安装git yum install git 3.安装成功 git --version 4.进入指定目录 ...

  5. 碰到的问题——建设基于TensorFlow的深度学习环境

    1.解决jupyter notebook问题:socket.error: [Errno 99] Cannot assign requested address 首先要生成一个jupyter的配置文件: ...

  6. 大数据下基于Tensorflow框架的深度学习示例教程

    近几年,信息时代的快速发展产生了海量数据,诞生了无数前沿的大数据技术与应用.在当今大数据时代的产业界,商业决策日益基于数据的分析作出.当数据膨胀到一定规模时,基于机器学习对海量复杂数据的分析更能产生较 ...

  7. 使用腾讯云 GPU 学习深度学习系列之二:Tensorflow 简明原理【转】

    转自:https://www.qcloud.com/community/article/598765?fromSource=gwzcw.117333.117333.117333 这是<使用腾讯云 ...

  8. 深度学习系列 Part(3)

    这是<GPU学习深度学习>系列文章的第三篇,主要是接着上一讲提到的如何自己构建深度神经网络框架中的功能模块,进一步详细介绍 Tensorflow 中 Keras 工具包提供的几种深度神经网 ...

  9. 【深度学习系列3】 Mariana CNN并行框架与图像识别

    [深度学习系列3] Mariana CNN并行框架与图像识别 本文是腾讯深度学习系列文章的第三篇,聚焦于腾讯深度学习平台Mariana中深度卷积神经网络Deep CNNs的多GPU模型并行和数据并行框 ...

随机推荐

  1. CSS中的字体描边

    兴趣使然,突然看见网上的一些带有描边的字体,觉得有点意思,便尝试去做了下 不是什么很厉害的技巧,当然也有参考张鑫旭大神写的文章 只能感叹,css的世界还很大,很广阔 直入主题: 对于文字的描边,一般都 ...

  2. BIF

    list()把一个可迭代对象转化为列表 tuple()把一个可迭代对象转化为元祖 str()把参数对象转化为字符串 len()返回参数的长度 max()返回序列或者参数集合中的最大值 min()返回序 ...

  3. Thread类与Runnable接口的深入理解

    Thread类与Runnable接口的深入理解1.Thread类实现了Runnable接口,实现run方法,其中target参数对应的就是一个Runnable接口的实现类 @Override publ ...

  4. 利用正则表达式实现python强口令检测

    """ Chapter 7 模式匹配和正则表达式 1 用import re 导入正则表达式模块 2 用re.compile()函数创建一个Regex对象(记得使用原始字符 ...

  5. 利用mybatis generator实现数据库之间的表同步

    项目背景: 项目需要对两个服务器上的表进行同步,表的结构可能不一样.比如服务器A上的表i同步数据到服务器B上的表j,i和j的结构可能不一样,当然大部分字段是一样的.项目看起来很简单,网上一搜也是很多, ...

  6. monkey命令解析

  7. Java 日志体系(二)jcl 和 slf4j

    Java 日志体系(二)jcl 和 slf4j <java 日志体系(一)统一日志>:https://www.cnblogs.com/binarylei/p/9828166.html &l ...

  8. [C#.net]SQL参数传入空值报错解决方案

    C#中的null与SQL中的NULL是不一样的,SQL中的NULL用C#表示出来就是DBNull.Value. 注意:SQL参数是不能接受C#的null值的,传入null就会报错. SqlComman ...

  9. JAVA微信公众号通过openid发送模板消息~

    1,问题产生 在微信公众号开发过程中,我们有时候做不同权限的时候,比如在注册的时候,需要审核,然后我们要想办法让对方知道审核的结果.这时候我们可以通过模板消息来通知. 2,第一步,首先在微信公众号上获 ...

  10. Java: 集合类详解

    0.参考文献 http://blog.csdn.net/liulin_good/article/details/6213815 1.java集合类图 1.1 1.2 上述类图中,实线边框的是实现类,比 ...