解决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 shell 脚本攻略学习12--文件权限详解,chmod命令详解,chown命令详解,chattr命令详解
文件权限详解 一.chmod命令详解 文件权限和所有权是Unix/Linux文件系统最显著的特征之一.linux中的每一个文件都与多种权限类型相关联,在这些权限中主要分类为3种: 用户(User)是文 ...
- NAT虚拟网络配置
NAT虚拟网络配置(Linux能上网) 1.先设置虚拟机的虚拟网络,设置里面的子网ip和网关ip地址: 有两种方式:①setup命令(不选DHCP,因为它是动态分配IP地址的) ②vi /etc/s ...
- max 基础知识
MDX基本语法 MD询语句的结构及语法 MDX查询示例 基本的MDX SELECT语句包含一SELELCT字句和一个FROM字句,以及一个可选的WHERE子句.如下 SELECT {[Measures ...
- rsync基础
参考资料:骏马金龙的rsync系列.该博主的博文质量很好,推荐大家关注. 环境 操作系统:CentOS Linux release 7.5.1804 (Core) 软件:rsync version ...
- View初探
View初探 学习自 <Android开发艺术探索> View漫谈 Activity构成了我们的界面但是知识一个空壳子,Activity与View相结合才构成了我们丰富多彩的界面,并且为了 ...
- 使用 IntraWeb (23) - 基本控件之 TIWTimer、TIWProgressBar、TIWProgressIndicator、TIWTimeEdit
TIWTimer //和 TTimer 没多大区别, 它的默认事件现在是异步的(OnAsyncTimer), 在网络上使用 OnTimer 肯定是非常糟糕的 TIWProgressBar //进度条 ...
- Failed to connect socket to '/var/run/libvirt/libvirt-sock'的问题解决
1.增加libvirtd用户组 groupadd libvirtd 2.设置用户到组 sudo usermod -a -G libvirtd $USER 3.设置启动libvirtd服务的用户组 vi ...
- LayoutInflater作用及使用(转)
作用: 1.对于一个没有被载入或者想要动态载入的界面, 都需要使用inflate来载入. 2.对于一个已经载入的Activity, 就可以使用实现了这个Activiyt的的findViewById方法 ...
- [坑] treap
先来挖个坑,以后有时间了来补上. treap: 学习资料: fhq式treap http://hi.baidu.com/wdxertqdtscnwze/item/7b6a9419be7c68cd ...
- STM32 F4 GPIO Modes
STM32 F4 GPIO Modes Goal: creating a visual summary of GPIO configuration modes. The summary at the ...