Python_ML-Day04: 深度学习、Tensorflow1.Tensorflow特点- 真正的可移植性引入各种计算设备的支持包括CPU/GPU/TPU,以及能够很好地运行在移动端,如安卓设备、ios、树莓派等等- 多语言支持Tensorflow 有一个合理的c++使用界面,也有一个易用的python使用界面来构建和执行你的graphs,你可以直接写python/c++程序。- 高度的灵活性与效率TensorFlow是一个采用数据流图(data flow graphs),用于数值计算的开源软件库能够灵活进行组装图,执行图。随着开发的进展,Tensorflow的效率不算在提高- 支持TensorFlow由谷歌提供支持,谷歌投入了大量精力开发 TensorFlow,它希望TensorFlow 成为机器学习研究人员和开发人员的通用语言2.安装pip3 install tensorflowpip3 install tensorflow==1.143.数据流图- Tensor: 张量,数据- operation: op算子,专门运算的操作节点.所有操作都是一个op- graph: 图, 这个程序的结构 - 由Tensor 和 op 组成的图- session: 会话, 运算图4.图 Graph: 图包含了一组op, tensor 和 一个会话session- 创建图:tf.Graph()- 使用图:# 创建一张图g = tf.Graph()# 使用图with g.as_default():a = tf.constant(5.0)b = tf.constant(6.0)sum1 = tf.add(a, b)with tf.Session() as sess:print(sess.run(sum1))5.op 与 tensor 的区别op: 只要使用tensorflow 的 api 定义的函数或者类,都是op. 即 tf. 点出来的都是算子tensor: 张量 指代的数据。仅仅是数据。 可以是 op 里面的数据。即 op 里面是可以有tensor的。算子可以包括运算和数据6.会话Session- 运行TensorFlow操作图的类,使用默认注册的图,也可以指定- tf.Session()- 会话资源会话可能拥有很多资源,如 tf.Variable,tf.QueueBase和tf.ReaderBase,会话结束后需要进行资源释放- sess = tf.Session()     sess.run(...)      sess.close()- 使用上下文管理器,自动关闭sessionwith tf.Session() as sess:sess.run(...)- 可以给会话添加配置项: 比如打印log: config=tf.ConfigProto(log_device_placement=True)- 交互式:tf.InteractiveSession() - 命令行使用- 会话的run(fetches, feed_dict=None,graph=None):0. fetches: 要运行的ops1. 不是op 不能运行2. 但有重载机制: + - * / 可以重载 比如: run(2 + 3)错 run(op + 2)可以3. placeholder 可以实时的提供训练的数据- placeholder(占位符) + feed_dict- plt = tf.placeholder(tf.float32, [2,3]) -- 表示一个类型是float32的2行3列的数据占位,但是没有实际的数据- plt = tf.placeholder(tf.float32, [None,3]) -- 表示一个类型是float32的 不定行 3列 的数据占位,但是没有实际的数据- sess.run(plt, feed_dict={plt:[[1,2,3],[3,4,5]]})- feed_dict: 是一个字典 允许调用者覆盖图中指定张量的值,提供给placeholder使用4. 返回值异常RuntimeError:如果它Session处于无效状态(例如已关闭)。TypeError:如果fetches或feed_dict键是不合适的类型。ValueError:如果fetches或feed_dict键无效或引用 Tensor不存在。7.张量- tensorflow基本的数据类型- 一个类型化的N纬度数组 tf.tensor- 三部分组成: 数据类型,形状[非常重要],名字- 形状: 0阶/1阶/2阶/n阶- 类型: tf.float32/float64/int32/int64/uint8/- 属性:1. graph    张量所在的图2. op     张量的操作名3. name       张量的字符串描述4. shape   张量形状- 0维 = ()- 1维 = (?)- 2维 = (?,?)- 动态形状和静态形状: 在张量的变化中,有没有生成一个新的张量数据1.静态形状- 创建一个张量之后,默认的形状。初始状态的形状- tf.Tensor.get_shape 获取静态形状- tf.Tensor.set_shape 更新对象的静态形状。通常用于在不能直接推断的情况下2.动态形状- 一种动态变化,一种描述原始张量在执行过程中的一种形状- tf.reshape: 创建一个具有不同动态形状的新张量3.注意- 转换静态形状的时候,1D-1D,2D-2D,但是不能跨阶 2D-3D- 对于已经固定或者set静态形状的张量,不能再次设置静态形状- tf.reshape 创建动态形状,元素个数要保持一致8.张量的操作- 创建固定值张量tf.zeros()tf.ones()tf.constant()- 创建随机张量1. 通过正态分布去创建[正态分布-平均值和标准差]tf.random_normal()- 代码# 全是0 的张量zero = tf.zeros(shape=[3, 4], dtype=tf.float32)# 全是1 的张量print(zero.eval())zero = tf.ones(shape=[3, 4], dtype=tf.float32)print(zero.eval())# 指定张量cons = tf.constant(value=[5, 1], shape=[3, 3], dtype=tf.float32)print(cons.eval())# 创建随机张量random = tf.random_normal(shape=[3, 3], mean=6, stddev=1.0, dtype=tf.float32)print(random.eval())- 改变张量类型tf.string_to_number(string_tensor, out_type, name)tf.cast(tensor, dtype, name)- 切片与拓展tf.concat()9.变量- 变量也是一种op. 是一种特殊的张量。能够进行持久化存储。它的值就是张量,默认被训练- 创建一个带值initial_value的新变量: tf.Variable(initial_value=None,name=None)0.initial_value:需要持久化的张量或者op1.assign(value):为变量分配一个新值,返回新值2.eval(session=None):计算并返回此变量的值3.name属性表示变量名字- 定义一个变量op的时候,一定要在会话当中运行初始化def variable():"""变量:return:"""# 初始化一个变量random = tf.random_normal([2, 3], mean=0, stddev=1.0)v1 = tf.Variable(random)print(v1)# 变量不能直接计算,必须先做显示的初始化操作init_op = tf.global_variables_initializer()with tf.Session() as sess:sess.run(init_op)print(sess.run(v1))10. 可视化学习Tensorboard- 步骤1. 将你的程序图结构序列化成事件文件events2. 使用Tensorboard,读取事件文件,显示图形- summary: 摘要1. tf.summary.FileWriter('/tmp/tensorflow/summary/test/', graph=default_graph)- 返回filewriter,写入事件文件到指定目录(最好用绝对路径),以提供给tensorboard使用- graph = sess.graph2.开启- tensorboard --logdir="/tmp/tensorflow/summary/test/"- 一般浏览器打开为127.0.0.1:6006- 注:修改程序后,再保存一遍会有新的事件文件,打开默认为最新11.自定义一个线性回归案例- 步骤分析1. 准备好数据- 比如 1个特征值和1个目标值,总计100个样本2. 建立模型- 随机初始化准备一组权重w, 一个偏置 b- y = wx + b- 模型的参数,必须用变量初始化。因为要迭代3. 求损失函数,均方误差- (y1-y1`)^2 + (y2-y2`)^2 + ... + (y1-y100`)^2 / 1004. 指定学习率,使用梯度下降去求解最优解- 工具分析1. 矩阵相乘tf.matmul(x,w)[m,n] * [n,1] = [m,1]2. 平方tf.square(error)3. 均值tf.reduce_mean(error)4. 梯度下降优化器- tf.train.GradientDescentOptimizer(learning_rate)- learning_rate:学习率- return:梯度下降op- 梯度爆炸/梯度消失1. 在极端的情况下,权重的值变得非常大,以至于溢出,导致Nan2. 如何解决梯度爆炸?- 重新设计网络- 调整学习率- 使用梯度截断: 在训练过程中检查和限制梯度的大小- 使用激活函数12.作用域- with tf.variable_scope("a"):- 作用1. 让模型代码更加清晰,作用分明13.增加变量显示- 观察模型的参数、损失值等变量的变化- 步骤1. 收集变量:添加权重参数,损失值等需要检测变化的变量,到tensorboard- tf.summary.scalar(name=’’,tensor) 收集对于损失函数和准确率等单值变量,name为变量的名字,tensor为值- tf.summary.histogram(name=‘’,tensor) 收集高维度的变量参数- tf.summary.image(name=‘’,tensor) 收集输入的图片张量能显示图片2. 合并变量并写入事件文件- merged = tf.summary.merge_all()- 运行合并:summary = sess.run(merged),每次迭代都需运行- 添加:FileWriter.add_summary(summary,i),i表示第几次的值14.模型的保存与加载- tf.train.Saver(var_list=None,max_to_keep=5)1. var_list:指定将要保存和还原的变量。它可以作为一个dict或一个列表传递.2. max_to_keep:指示要保留的最近检查点文件的最大数量。创建新文件时,会删除较旧的文件。如果无或0,则保留所有检查点文件。默认为5(即保留最新的5个检查点文件。)- 保存:saver.save(sess, '/tmp/ckpt/test/model')- 加载:saver.restore(sess, '/tmp/ckpt/test/model')- 保存文件格式:checkpoint文件15.自定义命令行参数- 步骤1. 首先定义有哪些参数需要在运行时指定- tf.app.flags.DEFINE_integer("flagname","default_value,"DESC")- tf.app.flags.DEFINE_integer("max_step",100,"模型训练的步数")2. 程序当中获取传入的参数- FLAGS = tf.app.flags.FLAGS- FLAGS.max_step16.源码import tensorflow as tfimport osos.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'# # 创建一张图# g = tf.Graph()# # 使用图# with g.as_default():#     a = tf.constant(5.0)#     b = tf.constant(6.0)#     sum1 = tf.add(a, b)#     with tf.Session() as sess:#         print(sess.run(sum1))def tensor():"""张量:return:"""# 占位符plt = tf.placeholder(tf.float32, [None, 2])print(plt)# 使用set_shape 确定形状为[3,2]plt.set_shape([3, 2])print(plt)# 静态形状张量一旦固定,则不能再次设置了,而且元素的个数和纬度要一致# plt.set_shape([4, 2])# print(plt)# 如果想再次设置形状,可以考虑使用动态张量。生成一个新的张量# 但是要注意: [2,3] 可以变成[3,2],[6,1,1] 但是不能[3,3] 因为特征值数量一共6个,没办法变成9个plt_reshape = tf.reshape(plt, [6, 1, 1])print(plt_reshape)def tensor_op():"""张量的操作:return:"""# 全是0 的张量zero = tf.zeros(shape=[3, 4], dtype=tf.float32)# 全是1 的张量print(zero.eval())zero = tf.ones(shape=[3, 4], dtype=tf.float32)print(zero.eval())# 指定张量cons = tf.constant(value=[5, 1], shape=[3, 3], dtype=tf.float32)print(cons.eval())# 创建随机张量random = tf.random_normal(shape=[3, 3], mean=6, stddev=1.0, dtype=tf.float32)print(random.eval())# 张量的类型转换c = tf.cast(random, tf.float32)print(c.eval())# 张量的合并。 列拼装cc = tf.concat([cons, c], axis=1)print(cc.eval())def variable():"""变量:return:"""# 初始化一个变量random = tf.random_normal([2, 3], mean=0, stddev=1.0)v1 = tf.Variable(random)print(v1)# 变量不能直接计算,必须先做显示的初始化操作init_op = tf.global_variables_initializer()with tf.Session() as sess:sess.run(init_op)# 把程序的图,写入到事件文件filewriter = tf.summary.FileWriter("./test", graph=sess.graph)print(sess.run(v1))def liner():"""手动实现线性回归:return:"""with tf.variable_scope("a"):# 准备数据 x 100 个样本 1 个特征   假设 目标值 y = 0.7x + 0.8x = tf.random_normal([100, 1], mean=1.75, stddev=0.5)# 建立线性回归模型 1特征1权重1偏置 y = wx + by_true = tf.matmul(x, [[0.7]]) + 0.8# 随机初始化权重weight 和偏置biasweight = tf.Variable(tf.random_normal([1, 1], mean=0, stddev=1), name='w')b = tf.Variable(0.0, name='b')with tf.variable_scope("b"):# 求预测predicty_pre = tf.matmul(x, weight) + b# 计算损失lossloss = tf.reduce_mean(tf.square(y_true - y_pre))# 梯度下降优化损失 learn_rate: 0-1. 返回一个optrain_op = tf.train.GradientDescentOptimizer(0.2).minimize(loss)# 通过会话,循环训练 运行程序[变量初始化global]init_op = tf.global_variables_initializer()# 收集tensortf.summary.scalar("losses", loss)tf.summary.histogram("weight", weight)# 合并merged_op = tf.summary.merge_all()# 定义一个保存模型的实例saver = tf.train.Saver(var_list=None, max_to_keep=5)with tf.Session() as sess:sess.run(init_op)print("初始w 和 b:", weight.eval(), b.eval())filewriter = tf.summary.FileWriter('./test/', sess.graph)# 加载模型,覆盖模型当中随机定义的参数,从检查点开始运行if os.path.exists("./ckpt/checkpoint"):saver.restore(sess, "./ckpt/model")for i in range(200):sess.run(train_op)# 运行合并的merge_opsummary = sess.run(merged_op)filewriter.add_summary(summary, i)print("第{}次训练完之后的w 和 b: ".format(i), weight.eval(), b.eval())saver.save(sess, "./ckpt/model")if __name__ == '__main__':liner()

Python_ML-Day04: 深度学习、Tensorflow相关推荐

  1. 使用深度学习TensorFlow框架进行图片识别

    Apsara Clouder大数据专项技能认证:使用深度学习TensorFlow框架进行图片识别 本认证系统的介绍了深度学习的一些基础知识,以及Tensorflow的工作原理.通过阿里云机器学习PAI ...

  2. 【神经网络与深度学习-TensorFlow实践】-中国大学MOOC课程(八)(TensorFlow基础))

    [神经网络与深度学习-TensorFlow实践]-中国大学MOOC课程(八)(TensorFlow基础)) 8 TensorFlow基础 8.1 TensorFlow2.0特性 8.1.1 Tenso ...

  3. 百度云-深度学习tensorflow搭建

    百度云上部署Tensorflow进行模型训练 上半年就了解过百度云但是还是tf1.0版本的,而谷歌3月份的升级到1.2改动挺大的,百度云上更新滞后,所以尽管有tf平台,版本落后每小时付费还是有点小贵, ...

  4. 【神经网络与深度学习-TensorFlow实践】-中国大学MOOC课程(四)(Python语言基础(2))

    [神经网络与深度学习-TensorFlow实践]-中国大学MOOC课程(四)(Python语言基础(2)) 第4讲 Python语言基础(2) 4.1 内置数据结构 4.1.1 序列数据结构(sequ ...

  5. 【神经网络与深度学习-TensorFlow实践】-中国大学MOOC课程(十二)(人工神经网络(1)))

    [神经网络与深度学习-TensorFlow实践]-中国大学MOOC课程(十二)(人工神经网络(1))) 12 人工神经网络(1) 12.1 神经元与感知机 12.1.1 感知机 12.1.2 Delt ...

  6. 通过深度学习+TensorFlow.js对蒙娜丽莎进行动画处理

    看蒙娜丽莎(Mona Lisa)画像时,你会发现她的眼睛将四处移动跟随你.这就是所谓的"蒙娜丽莎效应".为了娱乐,我们把蒙拉丽莎画像制成交互式数字肖像,通过你的浏览器和网络摄像头将 ...

  7. 【神经网络与深度学习-TensorFlow实践】-中国大学MOOC课程(十四)(卷积神经网络))

    [神经网络与深度学习-TensorFlow实践]-中国大学MOOC课程(十四)(卷积神经网络)) 14 卷积神经网络 14.1 深度学习基础 14.1.1 深度学习的基本思想 14.1.2 深度学习三 ...

  8. 深度学习 -- TensorFlow(项目)验证码生成与识别(多任务学习)

    目录 基础理论 一.生成验证码数据集 1.生成验证码训练集 1-0.判断文件夹是否为空 1-1.创建字符集(数字.大小写英文字母) 1-2.随机生成验证码(1000个,长度为4) 2.生成验证码测试集 ...

  9. 深度学习--TensorFlow(7)拟合(过拟合处理)(数据增强、提前停止训练、dropout、正则化、标签平滑)

    目录 拟合 1.拟合情况 2.抵抗过拟合方法 过拟合处理(防止过拟合): 一.数据增强 1.设置图像生成器 2.载入图片 3.图像转三维数据 4.三维转四维 5.生成图片(用图像生成器) 代码 二.提 ...

  10. 深度学习---TensorFlow学习笔记:搭建CNN模型

    转载自:http://jermmy.xyz/2017/02/16/2017-2-16-learn-tensorflow-build-cnn-model/ 最近跟着 Udacity 上的深度学习课程学了 ...

最新文章

  1. SHE PWM的simulink仿真谐波分析
  2. 删除binlog mysql_mysql中删除binlog的方法?mysql中如何删除binlog?
  3. hdu-3625 Examining the Rooms(斯特灵数第一类)
  4. 分享一些面试中的经验和心得
  5. Spring MVC讲解
  6. android pc模式 刘祚虎,刘作虎:一加三段式按键安卓手机唯一 5年付出亿级成本...
  7. cassandra 数据到Java对象的映射绑定
  8. BZOJ3172 TJOI2013 单词
  9. jffs2 启动的常见的问题
  10. 记一次Cassandra Java堆外内存排查经历
  11. javascript 西瓜一期 12 八进制的数数进位解析
  12. ai 分形艺术_作为艺术家的AI?
  13. 【读论文0623】The Devil Is in Classification: A Simple Framework for Long-Tail Instance Segmentation
  14. 不安全!!!都2020年了,你的网站还没上HTPPS说得过去吗?
  15. Nginx服务器---正向代理
  16. 名称的秘密:Excel中隐藏着的名称空间
  17. python算法工程师需要学什么_一个优秀的算法工程师必须具备哪些素质?
  18. http状态码大全304、201、203等等
  19. 炒货币赚钱吗 炒数字货币赚钱吗
  20. local class incompatible: stream classdesc serialVersionUID = 1, local class serialVersionUID = 2427

热门文章

  1. Linux系统内核介绍及Linux系统运行级别,uname,vmstat,top命令参数详解 和一些排查案例
  2. 2021-7 TIOBE
  3. egg-scripts: Permission denied
  4. 哈尔滨理工大学第七届程序设计竞赛初赛 题集
  5. NLP模型开发平台在舆情分析中的设计和实践
  6. 判断点是否在圆上(java)
  7. 计算机基础作业 工资表
  8. 2022最新彩虹易支付系统二开版本源码/新增推广返利模式+工单系统
  9. 微信扫描二维码在内置浏览器打不开文件的下载链接怎么办
  10. 分享 70 个你可能会用到的正则表达式