Tensorflow与深度学习第四天-Tensorflow基础1、深度学习介绍2、认识Tensorflow3、Tensorflow的安装4、Tensorflow初体验5、Tensorflow进阶6、案例:实现线性回归Ayellowbusdrivingdownaroadwithgreentreesandgreengrassinthebackground.Livingroomwithwhitecouchandbluecarpeting.Theroomintheapartmentgetssomeafternoonsun.这些都是深度学习程序所写聊天对话系统深度学习介绍深度学习,如深度神经网络、卷积神经网络和递归神经网络已被应用计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。深度学习框架Tensorflow认识Tensorflow1、真正的可移植性引入各种计算设备的支持包括CPU/GPU/TPU,以及能够很好地运行在移动端,如安卓设备、ios、树莓派等等2、多语言支持Tensorflow有一个合理的c++使用界面,也有一个易用的python使用界面来构建和执行你的graphs,你可以直接写python/c++程序。3、高度的灵活性与效率TensorFlow是一个采用数据流图(dataflowgraphs),用于数值计算的开源软件库能够灵活进行组装图,执行图。随着开发的进展,Tensorflow的效率不算在提高4、支持TensorFlow由谷歌提供支持,谷歌投入了大量精力开发TensorFlow,它希望TensorFlow成为机器学习研究人员和开发人员的通用语言Tensorflow特点使用tensorflow的公司Tensorflow教学版本•使用17年2月份发布的1.0版本•更快:TensorFlow1.0运行速度变得更加快•更灵活TensorFlow1.0还加入了一些高级API,包括tf.layers,tf.metrics和tf.losses模块。以及加入了一些类似scikit-learn的estimator机制•0.12版本之后支持的可视化能够可视化的看见程序图的结构Tensorflow的安装•Linux/ubuntu•Mac开启GPU支持(不推荐)•如果您的系统没有NVIDIA®GPU,请构建并安装CPU版本•Ubuntu:•安装CUDA和cuDNN•Mac:•安装CUDA和cuDNNTensorflow初体验通过案例来了解分析Tensorflow的整个结构加法运算Tensorflow加法运算数据流图:Tensorflow计算密集型vsIO密集型Tensorflow与以往接触的不同Tensorflow进阶1、图2、会话3、张量4、变量5、模型保存和加载6、自定义命令行参数图•图默认已经注册,一组表示tf.Operation计算单位的对象和tf.Tensor表示操作之间流动的数据单元的对象•获取调用:1.tf.get_default_graph()2.op、sess或者tensor的graph属性哪些是op图的创建•tf.Graph()•使用新创建的图g=tf.Graph()withg.as_default():a=tf.constant(1.0)assertc.graphisg会话•tf.Session()运行TensorFlow操作图的类,使用默认注册的图(可以指定运行图)•会话资源会话可能拥有很多资源,如tf.Variable,tf.QueueBase和tf.ReaderBase,会话结束后需要进行资源释放1.sess=tf.Session()sess.run(...)sess.close()2.使用上下文管理器withtf.Session()assess:sess.run(...)•config=tf.ConfigProto(log_device_placement=True)•交互式:tf.InteractiveSession()会话的run()方法•run(fetches,feed_dict=None,graph=None)运行ops和计算tensor•嵌套列表,元组,namedtuple,dict或OrderedDict(重载的运算符也能运行)•feed_dict允许调用者覆盖图中指定张量的值,提供给placeholder使用•返回值异常RuntimeError:如果它Session处于无效状态(例如已关闭)。TypeError:如果fetches或feed_dict键是不合适的类型。ValueError:如果fetches或feed_dict键无效或引用Tensor不存在。TensorflowFeed操作意义:在程序执行的时候,不确定输入的是什么,提前“占个坑”语法:placeholder提供占位符,run时候通过feed_dict指定参数张量1、张量的阶和数据类型2、张量操作关闭警告importosos.environ['TF_CPP_MIN_LOG_LEVEL']='2'张量的阶和数据类型•Tensorflow基本的数据格式•一个类型化的N维度数组(tf.Tensor)•三部分,名字,形状,数据类型张量的阶张量的数据类型张量属性•graph张量所属的默认图•op张量的操作名•name张量的字符串描述•shape张量形状张量的动态形状与静态形状•TensorFlow中,张量具有静态形状和动态形状•静态形状:创建一个张量或者由操作推导出一个张量时,初始状态的形状•tf.Tensor.get_shape:获取静态形状•tf.Tensor.set_shape():更新Tensor对象的静态形状,通常用于在不能直接推断的情况下•动态形状:一种描述原始张量在执行过程中的一种形状•tf.reshape:创建一个具有不同动态形状的新张量1、转换静态形状的时候,1-D到1-D,2-D到2-D,不能跨阶数改变形状2、对于已经固定或者设置静态形状的张量/变量,不能再次设置静态形状3、tf.reshape()动态创建新张量时,元素个数不能不匹配要点张量操作-生成张量为什么需要正态分布的变量值?正态分布概率密度函数为正态分布的期望值μ决定了其位置,其标准差σ决定了分布的幅度。当μ=0,σ=1时的正态分布是标准正态分布。张量操作-张量变换切片与扩展tf.concat(values,axis,name='concat')提供给Tensor运算的数学函数•算术运算符•基本数学函数•矩阵运算•减少维度的运算(求均值)•序列运算注:这些都是在1.0版本下的函数,不同版本会有些差异变量1、变量的创建2、变量的初始化3、变量的作用域变量•变量也是一种OP,是一种特殊的张量,能够进行存储持久化,它的值就是张量变量的创建•tf.Variable(initial_value=None,name=None)•创建一个带值initial_value的新变量•assign(value)为变量分配一个新值返回新值•eval(session=None)计算并返回此变量的值•name属性表示变量名字变量的初始化•tf.global_variables_initializer()添加一个初始化所有变量的op在会话中开启可视化学习Tensorboard•数据序列化-events文件TensorBoard通过读取TensorFlow的事件文件来运行•tf.summary.FileWriter('/tmp/tensorflow/summary/test/',graph=default_graph)返回filewriter,写入事件文件到指定目录(最好用绝对路径),以提供给tensorboard使用•开启tensorboard--logdir=/tmp/tensorflow/summary/test/一般浏览器打开为127.0.0.1:6006注:修改程序后,再保存一遍会有新的事件文件,打开默认为最新图中的符号意义增加变量显示•1、收集变量•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表示第几次的值目的:观察模型的参数、损失值等变量值的变化tensorflow实现一个简单的线性回归案例•简单的API介绍•线性回归实现结果演示动画演示Tensorflow运算API•矩阵运算•tf.matmul(x,w)•平方•tf.square(error)•均值•tf.reduce_mean(error)•tf.train.GradientDescentOptimizer(learning_rate)梯度下降优化•learning_rate:学习率,一般为•method:•return:梯度下降op梯度下降APITensorboard观察图结构,变量显示作用域想一想之前函数里面,一个变量的作用域?tensorflow变量作用域•tf.variable_scope(scope_name)创建指定名字的变量作用域观察变量的name改变?•嵌套使用变量作用域观察变量的name改变?如果在之前,给变量取相同的name会出现什么样的情况?tensorflow变量作用域的作用•让模型代码更加清晰,作用分明模型保存和加载•tf.train.Saver(var_list=None,max_to_keep=5)•var_list:指定将要保存和还原的变量。它可以作为一个dict或一个列表传递.•max_to_keep:指示要保留的最近检查点文件的最大数量。创建新文件时,会删除较旧的文件。如果无或0,则保留所有检查点文件。默认为5(即保留最新的5个检查点文件。)•例如:saver.save(sess,'/tmp/ckpt/test/model')•saver.restore(sess,'/tmp/ckpt/test/model')•保存文件格式:checkpoint文件自定义命令行参数1、2、tf.app.flags.,在flags有一个FLAGS标志,它在程序中可以调用到我们前面具体定义的flag_name3、通过tf.app.run()启动main(argv)函数Thankyou!