【xiaoh】tensorflow学习⼩组总结

机器学习

#1

思考问题:

1 监督学习和非监督学习的概念区分,应用场景调研。

使用监督学习或者非监督学习取决于不同的已用数据场景,如果数据是具有标注的则是监督学习;无标注的是无监督学习;部分带标注的话是半监督学习;还有可能一开始没有数据,但有执行Task的奖赏机制,机器自己生成输入数据,通过奖赏机制对数据进行标注,所以它还是以有监督学习为基础的。 监督学习:分类,回归;无监督学习:新闻分类、用户画像等;半监督学习:适用数据标注值收集不全或者没有的情况吧;增强学习:各种游戏AI等;

2 做机器学习项目,有哪些环节。

假如现在已经有了大量的数据,按照李航老师的《统计学习方法》,统计学习方法包括模型、策略、算法,对应过来也差不多,结合李宏毅的教程,模型就是假设数据会符合的函数集,是多项式函数、指数函数还是其它,但具体是函数的参数不确定的,就需要代价函数来衡量函数的优劣,那如何找到最好的函数参数就涉及到具体的算法,如梯度下降、牛顿法等等。总结下,(1)模型,确定数据符合的函数集;(2)策略,找到评价参数好坏的代价函数;(3)算法:找到使代价最小的参数。

3 深度学习有哪些应用领域。

很多,效果比较好的如机器翻译、图像识别、语音识别等。

4 数据预处理,需要注意哪些。

整个数据集或者采用随机/等距/分层抽样方法检查数据分布特征(中位数、均值、众数等)是否合理,对异常值、缺失值进行处理; 观察各个特征的取值范围,相差太大时进行归一化处理; 如有必要(特征太多),进行降维处理;

5 tensorflow运行原理,架构有哪些核心点。

张量(tensor)从图中流过(flow),即为TensorFlow。图由节点和线构成,节点对应操作或者输入的起点、输出的终点;线表示节点之间的关系,张量tensor从线上对节点进行输入输出。图必须在Session执行,可以执行单独的op,也可以执行复杂的“图”,这时会向上溯源,从源头将与之有关的图执行一遍。核心点包括: • 使用图 (graph) 来表示计算任务. • 在被称之为 会话 (Session) 的上下文 (context) 中执行图. • 使用 tensor 表示数据. • 通过 变量 (Variable) 维护状态. • 使用 feed 和 fetch 可以为任意的操作(arbitrary operation) 赋值或者从其中获取数据.

6 学习中的知识点收获记录。

理解tensorflow工作原理,熟悉基本操作。

实践练习

a 安装:笔记本,win10 64位,安装了anaconda,python版本是3.6.3,执行pip install tensorflow。但是后来发现,我能够在ipython下使用tf,但在jupyter、spyder下都提示没有tf这个模块,后来参考这篇博文https://blog.csdn.net/u010858605/article/details/64128466 实现可用。

工作基本原理: 张量(tensor)从图中流过(flow),即为TensorFlow。图由节点和线构成,节点对应操作或者输入的起点、输出的终点;线表示节点之间的关系,张量tensor从线上对节点进行输入输出。图必须在Session执行,可以执行单独的op,也可以执行复杂的“图”,这时会向上溯源,从源头将与之有关的图执行一遍。 • 使用图 (graph) 来表示计算任务. • 在被称之为 会话 (Session) 的上下文 (context) 中执行图. • 使用 tensor 表示数据. • 通过 变量 (Variable) 维护状态. • 使用 feed 和 fetch 可以为任意的操作(arbitrary operation) 赋值或者从其中获取数据.

在使用TF的过程中,先构建图,TF中已经有默认图,使用时直接添加节点op即可; 创建Session对象,使用Session.run函数执行图(对应的op),可以使用命令with tf.device("/gpu:1"):指定执行图的硬件设备("/cpu:0","/gpu:0"等); 交互式使用,可以执行sess = tf.InteractiveSession(),这样就可以使用 Tensor.eval()和Operation.run()方法代替 Session.run(); TF中所有的变量都是tensor形式的; Variable维护图执行过程中的状态信息(没搞太懂),在图中用到Variable时,一定要执行initialize_all_variables; fetch,获取tensor值,操作op默认都会返回张量; feed,可以提供feed 数据作为run()调用的参数. feed只在调用它的方法内有效方法结束, feed就会消失. 最常见的用例是将某些特殊的操作指定为 “feed” 操作, 标记的方法是使用 tf.placeholder()为这些操作创建占位符,feed采用字典的形式提供参数,实操练习中尝试用了下。

#ex1: x=2 ,y=3,z=7 求解: res=x*y+z的结果
import tensorflow as tf

# define values
x = 2.
y = 3.
z = 7.

#define ops
mul = tf.multiply(x,y)
add = tf.add(mul, z)

with tf.Session() as sess:
    print(sess.run(add))


#ex2: 矩阵乘法:A : [[3., 3.]] B: [[2.],[2.]] A矩阵和B矩阵的乘法运算
import tensorflow as tf
# define ops include input and output
matA = tf.placeholder(tf.float32, shape=(1,2))
matB = tf.placeholder(tf.float32, shape=(2,1))
output = tf.matmul(matA, matB)

# run graph
with tf.Session() as sess:
    result = sess.run(output, feed_dict={matA:[[3., 3.]], matB:[[2.], [2.]]})
    print(result)