解决tensorflow在训练的时候权重是nan问题
搭建普通的卷积CNN网络。
nan表示的是无穷或者是非数值,比如说你在tensorflow中使用一个数除以0,那么得到的结果就是nan。
在一个matrix中,如果其中的值都为nan很有可能是因为采用的cost function不合理导致的。
当使用tensorflow构建一个最简单的神经网络的时候,按照tensorflow官方给出的教程:
https://www.tensorflow.org/get_started/mnist/beginners
http://wiki.jikexueyuan.com/project/tensorflow-zh/tutorials/mnist_beginners.html (中文教程)
具体的含义就不解释了。大概分为三个部分:1,导入数据集;2,搭建模型,并且定义cost function(也叫loss function);3,训练。
对于过程1,我们采用的不是mnist数据集,而是自己定义了一个数据集,其中
对于过程2,我们使用最简单的CNN网络,然后定义cost function的方式是:
cross_entropy = -tf.reduce_sum(y_*tf.log(y))
对于过程3,我们也采用教程中的例子去训练。
但是在初始化W后就立刻查看W参数的结果,得到的结果都是nan,以下是输出W权重后的结果:
这个现象是由于cost function引起的:
cross_entropy = -tf.reduce_sum(y_*tf.log(y))
上面的语句中的y_是数据集的label。我们做的是显著性检测,就是数据集的ground truth。
并且这个label或者ground truth一定要是one hot类型的变量。
那什么是one hot类型的变量呢?
举一个例子:比如一个5个类的数据集,用0,1,2,3,4来表示5个类的标签,因此label=0,1,2,3,4。这时候有的人会把y_=0,1,2,3,4。直接输入到cost function——-tf.reduce_sum(y_*tf.log(y))中,那么这样会导致W参数初始化都是nan。
解决办法就是我们把label=0,1,2,3,4变为one hot变量,改变后的结果是:label=[1,0,0,0,0],[0,1,0,0,0],[0,0,1,0,0],[0,0,0,1,0],[0,0,0,0,1],这样再输入到tf.reduce_sum(y_*tf.log(y))中,就是正确的了,如下图,我们采用的解决办法是第二种,具体参考下文。
那么本文提供两种方法来解决这个问题:
1,将y_从原来的类别数字变为one hot变量,使用
labels = tf.reshape(labels, [batch_size, 1])
indices = tf.reshape(tf.range(0, batch_size, 1), [batch_size, 1])
labels = tf.sparse_to_dense(
tf.concat(values=[indices, labels], axis=1),
[batch_size, num_classes], 1.0, 0.0)
将label转为one hot(batch_size是你每次抓取的训练集的个数)
2,换一个cost function,原来的cost function = -tf.reduce_sum(y_*tf.log(y))
使用的是交叉熵函数,现在我们换成二次代价函数 cost function = tf.reduce_sum(tf.square(tf.substract(y_,y)))
解决tensorflow在训练的时候权重是nan问题的更多相关文章
- 在 C/C++ 中使用 TensorFlow 预训练好的模型—— 直接调用 C++ 接口实现
现在的深度学习框架一般都是基于 Python 来实现,构建.训练.保存和调用模型都可以很容易地在 Python 下完成.但有时候,我们在实际应用这些模型的时候可能需要在其他编程语言下进行,本文将通过直 ...
- 深度学习笔记 (二) 在TensorFlow上训练一个多层卷积神经网络
上一篇笔记主要介绍了卷积神经网络相关的基础知识.在本篇笔记中,将参考TensorFlow官方文档使用mnist数据集,在TensorFlow上训练一个多层卷积神经网络. 下载并导入mnist数据集 首 ...
- 安装 tensorflow 1.1.0;以及安装其他相似版本tensorflow遇到的问题;tensorflow 1.13.2 cuda-10环境变量配置问题;Tensorflow 指定训练时如何指定使用的GPU;
# 安装 2.7 环境conda create -n python2. python= conda activate python2. # 安装 1.1.0 gpu版本pip # 配置环境变量expo ...
- 解决tensorflow Saver.restore()无效的问题
解决tensorflow 的 Saver.restore()无法从本地读取变量的问题 最近做tensorflow 手写数字识别的时候遇到了一个问题,Saver的restore()方法无法从本地恢复变量 ...
- tensorflow分布式训练
https://blog.csdn.net/hjimce/article/details/61197190 tensorflow分布式训练 https://cloud.tencent.com/dev ...
- Tensorflow Mask-RCNN训练识别箱子的模型运行结果(练习)
Tensorflow Mask-RCNN训练识别箱子的模型
- 在 C/C++ 中使用 TensorFlow 预训练好的模型—— 间接调用 Python 实现
现在的深度学习框架一般都是基于 Python 来实现,构建.训练.保存和调用模型都可以很容易地在 Python 下完成.但有时候,我们在实际应用这些模型的时候可能需要在其他编程语言下进行,本文将通过 ...
- 利用阿里云容器服务打通TensorFlow持续训练链路
本系列将利用Docker和阿里云容器服务,帮助您上手TensorFlow的机器学习方案 第一篇:打造TensorFlow的实验环境 第二篇:轻松搭建TensorFlow Serving集群 第三篇:打 ...
- 在C#下使用TensorFlow.NET训练自己的数据集
在C#下使用TensorFlow.NET训练自己的数据集 今天,我结合代码来详细介绍如何使用 SciSharp STACK 的 TensorFlow.NET 来训练CNN模型,该模型主要实现 图像的分 ...
随机推荐
- linux中如何清空一个文件的内容
方法1: echo "" > /www.jbxue.com /xxx.log 方法2: echo "" >> /www.jbxue.com / ...
- 升级到AndroidStudio3.2.1的注意事项
升级到AndroidStudio3.2.1的注意事项 即不用再在二级结构的build.gradle中的compileSdkVersion 28 下声明 buildToolsVersion &q ...
- BZOJ.1901.Dynamic Rankings(整体二分)
题目链接 BZOJ 洛谷 (以下是口胡) 对于多组的询问.修改,我们可以发现: 假设有对p1,p2,p3...的询问,在这之前有对p0的修改(比如+1),且p0<=p1,p2,p3...,那么我 ...
- 实现常用的配置文件/初始化文件读取的一个C程序
在编程中,我们经常会遇到一些配置文件或初始化文件.这些文件通常后缀名为.ini或者.conf,可以直接用记事本打开.里面会存储一些程序参数,在程序中直接读取使用.例如,计算机与服务器通信,服务器的ip ...
- 百度离线下载Tampermonkey脚本
https://greasyfork.org/zh-CN/scripts/23635-%E7%99%BE%E5%BA%A6%E7%BD%91%E7%9B%98%E7%9B%B4%E6%8E%A5%E4 ...
- JavaScript获取事件对象和目标对象
在JavaScript开发中,经常需要获取触发某个事件的目标对象.让后根据目标对象进行不同的业务处理.下面展示通过JavaScript获取触发事件的事件目标对象.如下: Js代码 1 2 3 4 5 ...
- lua中的pairs和ipairs差别
pairs Returns three values: the next function, the table t, and nil, so that the construction for k, ...
- Golang 处理 Json(一):编码
JSON 是一种数据格式描述语言.以 key 和 value 构成的哈系结构,类似 Javascript 中的对象,python 中的字典.通常 json 格式的 key 是字符串,其值可以是任意类型 ...
- 积跬步,聚小流-------js实现placeholder的效果
前几天在"技术问答"上问了问题,然后有回复一句话就给概括了:placeholder的效果,不得不说.了解的多了才干说起来言简意赅,用最简单的语言描写叙述最清晰的表达. 可是plac ...
- 清理tomcat服务器缓存
据悉,2014年最流行的应用服务器排行榜揭晓Tomcat仍然处于领先位置.41%的部署使用的是Tomcat,和2013年的43%的市场份额数据一 致.下面还是我们的热门选择Jetty和JBoss/Wi ...