tensorflow2.x个人学习笔记以及tensorflow踩坑日记

前言:下面整理了tensorflow2.x学习的过程中自己整理的一些笔记,后续会不断的更新

一、服务器端的tensorboard文件如何在本地浏览器中查看

(1)第一步:登录服务器:——使用SSH登录
在本地计算机使用先用ssh工具重定向:

ssh -L 16006:127.0.0.1:6006  name@server_ip -p 22 # 你的用户名name和ip  有的服务器做了端口映射 所以-p后面添加你服务器的连接端口号,默认是22端口

其中:16006代表自己本机的端口号,6006是服务器上tensorboard使用的端口号。

(2)在本地终端开启tensorflow

export LC_ALL=C
tensorboard --logdir=path --port=6006 # path是你服务器上保存的tensorboard文件的目录,这里需要尤其注意

(3)本地浏览器浏览

本地浏览器输入:http://127.0.0.1:16006/
 

上述三部即可在本地浏览器查看服务器端的tensorboard文件了

二、在使用tensorflow2.x过程中所踩过的坑

(1)关于子类化模型的保存问题

踩过坑,关于子类化模型没有使用默认的fit进行训练,而是自定义训练过程,保存模型的时候出现错误,不能够保存整个模型,需要设置model._set_inputs()

参见我的博文:详解tensorflow2.0的模型保存方法(一)

(2)关于验证GPU是否可用的问题

即使通过tf.test.xxx和tf.cinfig.xxx验证了GPU、CUDA、CUDNN都是返回的True,也并不代表这个TensorFlow是可以正常使用的,我们在编写卷积层使用conv2d或者是Conv2D的时候,在使用lstm或者LSTM的时候依然是错误的,这可能是我们所安装cudnn版本太低的问题,

比如我使用tensorflow2.1,CUDA10.1、cudnn7.6.3 就出现了这个问题,找了很久,后来将cudnn7.6.3更新成cudnn7.6.5就成功了!

(3)tensorflow2.1在使用keras的评价指标的时候出现的坑

需要格外注意的是:在使用tf.keras.metrics.xxx中的任意一个内容的时候,大概会需要160M以上的内存,若果是显卡被别人占用。比如我就什么都不运算,就只下面的一句话,看起来什么也没有干,但是它依然报错了:

import tensorflow as tf

acc = tf.keras.metrics.CategoryAccuracy()

则会报错,报错内容为:

tensorflow.python.framework.errors_impl.InvalidArgumentError: assertion failed: [0] [Op:Assert] name: EagerVariableNameReuse

所以在使用的时候应该指定未使用的GPU,已确定不会出错,

这个坑自己踩了,足足花了两天时间才解决。

(3)在进行卷积运算的时候或者是循环神经网络的时候出现如下错误:

could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR

Failed to get convolution algorithm. This is probably because cuDNN failed to initialize, so try looking to see if a warning log message was printed above.

在网上试了很多方法,什么清空缓存,即rm -rf ~/.nv/ 

然后什么CUDA与CUDNN的版本不匹配,尝试了各个版本的cudnn,最终依然得不到解决,个人解决方案很简单,那就是查看一下GPU是不是别人在使用,比如我在测试的时候总是出现这个错误,一看发现别人正在还用GPU:0,及时通过查看,GPU:0的使用不到40%。自己怎么不能用呢?可能是别人设置了什么,所以解决办法就是:

通过tf.device()重新指定一块GPU,即可

或者是有时候模型过于庞大,GPU内存装不下,也会出现这样的问题。

 

 

三、tensorflow2.x总结概述

3.1 三种计算图:

  • tf1.x的默认自动静态图、分为两步:第一步:定义计算图,第二步:通过会话执行计算图
  • tf2.x的默认自动动态图、定义和执行是立即执行的,立即得到返回结果。
  • 使用tf.function包装的AutoGraph。运行该函数就相当于在TensorFlow1.0中用Session执行代码。使用tf.function构建静态图的方式叫做 Autograph.

什么是计算图呢?

计算图由节点(nodes)和线(edges)组成。

节点表示操作符Operator,或者称之为算子,线表示计算间的依赖。

实线表示有数据传递依赖,传递的数据即张量。

虚线通常可以表示控制依赖,即执行先后顺序。

tensorflow2.x个人学习笔记以及tensorflow踩坑日记_第1张图片

可以用@tf.function装饰器将普通Python函数转换成和TensorFlow1.0对应的静态计算图构建代码。

在TensorFlow1.0中,使用计算图分两步,第一步定义计算图,第二步在会话中执行计算图。

在TensorFlow2.0中,如果采用Autograph的方式使用计算图,第一步定义计算图变成了定义函数,第二步执行计算图变成了调用函数。(即定义python函数就相当于是定义计算图、调用该函数就相当于于是执行计算图

实践中,我们一般会先用动态计算图调试代码,然后在需要提高性能的的地方利用@tf.function切换成Autograph获得更高的效率。

3.2 tensorflow2.x的三种API

低阶API

中阶API:包括数据管道tf.data、特征列feature_column、激活函数、损失函数、各种层、评估指标、优化器、回调函数

高阶API:

      构建模型的三种方法:

               低阶函数构建

               使用Sequence和Model构建

               使用SubModel来构建

     训练模型的三种方法:

               内置fit、evaluate方法

               内置tran_on_batch、test_on_batch方法

               自定义训练循环

总结:三个三,即三种计算图、三种构建模型方法、三种训练方法

 

 

你可能感兴趣的:(tensorflow2.x,TensorFlow)