Tensorflow使用技巧
文章平均质量分 53
这里记录一些Tensorflow(/Keras)相关的使用技巧,以及踩坑实录。
silent56_th
大学生一枚,对机器学习、图像处理感兴趣,偶尔也会刷刷leetcode或者hihocoder。希望在这里可以和大家多多交流,互相学习。
展开
-
tensorflow+multiprocessing实现并行调参
笔者需要得到100组不同的超参数 训练后的测试准确率,其中不同的超参数对应于不同的网络结构,故Graph和Session均不能共享。即笔者需要执行100次 构建Graph-新建Session-Train&Test-Close&Quit 的操作。 而程序本身占用资源不多,于是便想要实现并行,加速调参。需求:输入100组超参数,返回相应超参数对应的测试准确率每组超参数...原创 2018-08-04 23:19:13 · 8808 阅读 · 14 评论 -
Tensorflow使用AUC Metric遇到问题:Attempting to use uninitialized value
翻译自:https://stackoverflow.com/questions/44422508/tensorflow-attempting-to-use-uninitialized-value-auc-auc-auc-false-positives AUC函数内部生成了local variable,用于计算以及update,需要通过类似tf.local_variables_initializ...翻译 2018-05-07 16:19:02 · 2774 阅读 · 0 评论 -
使用GPU训练大神经网络之 显存控制策略与提升
本文是“[PPoPP18] SuperNeurons:Dynamic GPU Memory Management for Training Deep Neural Networks”的论文阅读笔记,论文、talk视频PPT等详见作者主页:https://linnanwang.github.io/ 参考资料: https://linnanwang.github.io/ How to Optim...原创 2018-05-21 21:26:37 · 7309 阅读 · 3 评论 -
Tensorflow全局设置可见GPU编号
笔者需要tensorflow仅运行在一个GPU上(机器本身有多GPU),而且需要依据系统参数动态调节,故无法简单使用CUDA_VISIBLE_DEVICES。 一种方式是全局使用tf.device函数生成的域,但设备号需要在绘制Graph前指定,仍然不够灵活。 查阅文档发现config的GPUOptions中的visible_device_list可以定义GPU编号从visible到virt...原创 2018-07-31 19:58:48 · 4369 阅读 · 3 评论 -
ubuntu16.04下的tensorflow源码安装,踩坑&填坑记录[ubuntu16.04+GTX960+CUDA8.0+cuDNN5.1.5]
ubuntu16.04下的tensorflow源码安装,踩坑&填坑记录[ubuntu16.04+GTX960+CUDA8.0+cuDNN5.1.5]原创 2016-11-28 23:05:09 · 1224 阅读 · 0 评论 -
Ubuntu安装NVIDIA驱动失败解决:登陆界面重复登录
笔者有一年多没有折腾系统安装这些事情了,最近实验室给换了个新电脑,装系统过程中又遇到了一些踩过的坑都忘了,记录在这里方便以后查询。系统环境:Ubuntu16.04(win10双系统) + GTX1060 目标:想要装NVIDIA的驱动,进而搭一下CUDA环境。问题复现:在设置/软件与更新/附件驱动 里面选择了相对较新的驱动nvidia-375。 问题现象:重启之后可以看见正常的登陆界面,但输入正原创 2017-08-24 17:19:08 · 4229 阅读 · 0 评论 -
Keras解决OOM超内存问题
如果在Keras内部多次使用同一个Model,例如在不同的数据集上训练同一个模型进而得到结果,会存在内存泄露的问题。在运行几次循环之后,就会报错OOM。解决方法是在每个代码后面接clear_session()函数,显示的关闭TFGraph,再重启。详情参考 https://keras.io/backend/#backend-functions。from keras import backend as翻译 2017-03-03 23:31:34 · 21077 阅读 · 19 评论 -
Keras设置以及获取权重
layer的两个函数:get_weights(), set_weights(weights)。 详情请参考about-keras-layers。翻译 2017-03-12 22:26:00 · 24230 阅读 · 5 评论 -
Keras求取任意两个节点之间的导数
使用backend里面的gradient函数。此函数就是对于tensorflow里面的gradient函数的包装,输入输出都是tensor,可以把此函数想象为Operator。详情请参考backend-functions,tensorflow_backend.py,Gradient Computation。原创 2017-03-12 22:34:05 · 2352 阅读 · 0 评论 -
keras的EarlyStopping callbacks的使用与技巧
本文是笔者使用EarlyStopping的心得,很多是笔者自己的思考,欢迎大家讨论指教。 具体EarlyStop的使用请参考官方文档和源代码。EarlyStopping是什么EarlyStopping是Callbacks的一种,callbacks用于指定在每个epoch开始和结束的时候进行哪种特定操作。Callbacks中有一些设置好的接口,可以直接使用,如’acc’,’val_acc’,’los原创 2017-06-02 16:55:10 · 51064 阅读 · 13 评论 -
Keras之LSTM源码阅读笔记
这里目前为止只是博主阅读Keras中LSTM源码的草稿笔记,内容不全,没有清晰的逻辑,只是堆砌个人想法。参考文献: 1. keras的官方相关文档 2. LSTM原论文 3. keras的RNN源码1. 接口研究1.1. Recurrent接口Recurrent是LSTM的父类(实际是通过SimpleRNN间接继承),定义所有RNNs的统一接口。1.1.1. implementation:im原创 2017-06-18 23:45:22 · 8354 阅读 · 3 评论 -
Keras设定GPU使用内存大小(Tensorflow backend)
纯粹搬运工,接受英语的请看原网址:Keras Tensorflow backend automatically allocates all GPU memory。通过设置Keras的Tensorflow后端的全局变量达到。import osimport tensorflow as tfimport keras.backend.tensorflow_backend as KTFdef get_se翻译 2017-03-03 23:22:44 · 15354 阅读 · 0 评论 -
Keras指定使用GPU
使用CUDA_VISIBLE_DEVICES.CUDA_VISIBLE_DEVICES=1 python train.py转载 2017-03-03 23:26:59 · 15193 阅读 · 0 评论 -
Keras使用tensorflow代码
几乎所有相关代码都是backend里面,tensorflow与theano共同拥有的函数在backend.common里面,这部分代码无论使用任何backend都可以运行。其中tensorflow相关的位于backend.tensorflow_backend。 如果使用tensorflow backend,几乎所有的Keras.tensor都可以使用tensorflow内部的Operator。原创 2017-03-15 20:19:48 · 3446 阅读 · 0 评论 -
远程使用内网服务器的tensorboard和jupyter notebook
基本做法就是通过ssh建立主机和服务器之间的隧道,然后把服务器当地的端口转发到主机。建立SSH隧道关于ssh的应用可以参考ssh -D -L -R 差异。(这篇文章里的host1可以看作客户端,host2看作服务器,host3是中间转接主机3) 主要困难在于服务器位于内网,外网客户端不可见。客户端分两种情况,分别是客户端位于内网和外网。(外网指的是有公网IP,世界任意位置可以通过其IP地址找到该电原创 2017-04-05 23:25:15 · 7678 阅读 · 2 评论 -
在tensorflow中使用keras作为高层接口
最近从keras转战tensorflow,原先的代码又不想重写,幸好keras代码可以在tensorflow中使用。详情请参考将Keras作为tensorflow的精简接口。 简单应用的话,就是把keras当作tf.layers里面的层来用,placeholder等价于Keras.Input,然后基本和keras里面使用model模块的时候构建方式相同。最后的model也可以使用的,但是我就是想要原创 2017-04-24 17:17:10 · 6769 阅读 · 0 评论 -
tensorflow重复使用共享变量
在构造CNN以及LSTM等模型的时候,需要重复使用共享权重。但是tensorflow默认是不允许重复使用变量的,会报一些InvalidArgumentError或者Attemping to use uninitialized value等错误。解决方法是使用variable_scope,并且设置该variable_scope的reuse=True。设置方法由两个:with tf.variable_s原创 2017-04-25 23:16:54 · 7698 阅读 · 0 评论 -
tensorflow做交叉验证遇到InvalidArgumentError
原代码的逻辑是train函数构造图,并训练。val_train函数只负责切分训练集。跑代码之后遇到InvalidArgumentError: You must feed a value for placeholder tensor '*' with dtype float后来发现是因为每次train函数都是在default_graph上修改,所以两次train的调用,使得sess重复使用了其内部的变原创 2017-04-25 23:29:59 · 19448 阅读 · 7 评论 -
Keras以及Tensorflow强制使用CPU
Keras如果是使用Theano后端的话,应该是自动不使用GPU只是用CPU的,启动GPU使用Theano内部命令即可。 对于Tensorflow后端的Keras以及Tensorflow会自动使用可见的GPU,而我需要其必须只运行在CPU上。网上查到三种方法,最后一种方法对我有用,但也对三种都做如下记录:使用tensorflow的 with tf.device('/cpu:0'):函数。简单操作原创 2017-05-22 17:59:31 · 40679 阅读 · 7 评论 -
CS20si课程笔记1:Tensorflow Introduction
虽然一直使用Tensorflow+Keras,但是没有一个关于Tensorflow的整体框架理解,所以趁着暑假刷一下Stanford刚开的关于Tensorflow的课程CS20si。 关于课程的slides, notes以及各种介绍请参照课程官网以及Github Repo。须注明的是课程是一门新课,而且Tensorflow也没有稳定下来的API,所以应该只是当前时刻一个较棒的分享,并不具有太多的权原创 2017-07-10 16:01:42 · 3404 阅读 · 2 评论 -
win10使用tensorboard遇到无法显示问题
ubuntu遇到一些问题,转到win10,但是发现tensorboard居然不可用,出来的网页啥也没有。搜索了一下,发现一个简单有效的方法,记录在此。以后有时间再去究其原因,找一个优雅的解法。解决方法: 在tensorboard.exe的那个文件目录下放置log文件,然后运行tensorboard。 至于找到tensorboard.exe的方法有很多,我是通过PATH里面根据名称筛选得到,为C:转载 2017-07-18 20:09:31 · 5984 阅读 · 0 评论 -
Tensorflow使用技巧:通过graph.as_graph_def探索函数内部机制
Tensorflow有tf.Graph类,用于存储计算图。而计算图其实就是由节点和有向边组成,每个点包括操作Op、数值value、类型dtype、形状shape等属性。探索诸如tf.Variable()等函数的内部机制的过程中,就需要查看计算图的变化情况,包括新建了哪些节点,输入是什么等等。例如想要探讨tf.constant函数的内部机制,则运行以下代码:import tensorflow as t原创 2017-07-20 18:08:37 · 9244 阅读 · 0 评论 -
Tensorflow累加的实现
由于python内部的变量其实都是reference,而Tensorflow实现的时候也没有意义去判断输出是否是同一变量名,从而判定是否要新建一个Tensor用于输出。Tensorflow为了满足所有需求,定义了两个不同的函数:tf.add和tf.assign_add。从名字即可看出区别,累加应该使用tf.assign_add。具体地,笔者需要一个iteration counter类似的变量,即每次原创 2017-07-20 17:12:20 · 5428 阅读 · 1 评论 -
Tensorflow可以使用tensor的name索引tensor,用于sess.run
具体参考Tensorflow官网:https://www.tensorflow.org/api_docs/python/tf/Session 了解此信息的来源:https://stackoverflow.com/questions/37849322/how-to-understand-the-term-tensor-in-tensorflow刚刚发现这个功能,一个直接好处就是原先通过函数构建计算图原创 2017-07-20 20:24:03 · 6024 阅读 · 0 评论 -
Tensorflow中关于Tensor和Variable的理解
刷课过程中思考到Variable和Tensor之间的区别,尝试发现在如下代码中:a = tf.Variable(tf.ones(1))b = tf.add(a,tf.ones(1))a是Variable,而b是Tensor。发现自己对Variable和Tensor之间的区分了解不多,所以搜索了一下,记录自己的思考,欢迎指教。Variable是可更改的(mutable),而Tensor是不可更改的原创 2017-07-20 20:56:28 · 12475 阅读 · 2 评论 -
tensorflow安装所遇问题:libcudnn.so.6:cannot open sharedobject file: No such file or directory
其实问题也不大,但是充分反映了需要仔细阅读错误代码,才能快速准确的解决问题。系统环境:Ubuntu16.04 + GTX1060 目的:配置一下python-tensorflow环境问题复现: 使用设置/软件与更新/附件驱动 安装nvidia-375 使用CUDA-8.0*.run安装CUDA 使用cudnn*.tgz安装cudnn5 PATH里面加入了/usr/local/cuda-8.原创 2017-08-25 23:09:05 · 30158 阅读 · 2 评论 -
tensorflow判断两个tensor是否完全相同
来源于解决一个csdn中的问答,问答链接:http://ask.csdn.net/questions/652382#answer_460706笔者想到的方法就是直接把bool类型转换到int处理,之后方法就很多样了(求和、求最小值等等,总归是利用一些全一序列的性质)。下面给一个例子: a = tf.placeholder(tf.int32,[2,]) b = tf.placeholder(tf.i原创 2017-08-26 21:01:41 · 8636 阅读 · 3 评论 -
win10使用tensorboard 0.0.0.0:6006无法访问
使用win10+anaconda+tensorboard(tensorflow1.2.),使用0.0.0.0:6006进行访问,出现无法访问提示。稍微去github的issue里面看见此时(2017.9)该问题还是open的状态,解决方法是使用localhost:6006或者127.0.0.1:6006。win10使用tensorboard还遇到无法显示graph的情况,详情参看: win10使用t原创 2017-09-08 20:32:39 · 8330 阅读 · 0 评论 -
tensorflow不同位置使用相同的name_scope
最近笔者想要把网络层写成类,而不是函数,所以需要在各个位置都使用相同的name_scope。然后遇到如果仅仅使用with tf.name_scope会在不同位置上生成不同的name_scope。稍微搜索了一下找到tensorflow中name_scope使用的一些细节,记录在此。主要是转载https://stackoverflow.com/questions/45670224/why-the-tf-原创 2017-10-13 23:37:18 · 2027 阅读 · 0 评论 -
tensorflow GPU显存控制
参考资料:https://www.tensorflow.org/tutorials/using_gpu 文中提到了两个控制方法:设置使用显存的百分比,以及设置逐渐增加使用的GPU显存。 关于第一种方法,可以参考Keras指定使用GPU、Keras设定GPU使用内存大小(Tensorflow backend)。 这里翻译第二种方法,代码如下:config = tf.ConfigProto()c翻译 2017-11-06 22:42:24 · 1956 阅读 · 0 评论 -
tensorflow执行操作,不返回值
翻译自: https://stackoverflow.com/questions/42796840/update-a-variable-without-return-its-value-in-tensorflow 详见:tensorflow.session.run文档: https://www.tensorflow.org/api_docs/python/tf/Session#run即只执行ten翻译 2018-01-18 23:49:17 · 844 阅读 · 0 评论 -
tensorflow只使用tensor值,不参与反向传播
详见: https://www.tensorflow.org/api_docs/python/tf/stop_gradient 使用stop_gradient函数,其输出值与输入相同,但不会参与反向传播中的梯度计算。原创 2018-01-20 20:29:37 · 4086 阅读 · 3 评论 -
tensorflow根据输入更改tensor shape
涉及随机数以及类RNN的网络构建常常需要根据输入shape,决定中间变量的shape或步长。 tf.shape函数不同于tensor.shape.as_list()函数,后者返回的是常值list,而前者返回的是tensor。使用tf.shape函数可以使得中间变量的tensor形状随输入变化,不需要在构建Graph的时候指定。但对于tf.Variable,因为需要提前分配固定空间,其shape...原创 2018-04-04 22:11:56 · 4785 阅读 · 2 评论