搭建普通的卷积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问题的更多相关文章

  1. 在 C/C++ 中使用 TensorFlow 预训练好的模型—— 直接调用 C++ 接口实现

    现在的深度学习框架一般都是基于 Python 来实现,构建.训练.保存和调用模型都可以很容易地在 Python 下完成.但有时候,我们在实际应用这些模型的时候可能需要在其他编程语言下进行,本文将通过直 ...

  2. 深度学习笔记 (二) 在TensorFlow上训练一个多层卷积神经网络

    上一篇笔记主要介绍了卷积神经网络相关的基础知识.在本篇笔记中,将参考TensorFlow官方文档使用mnist数据集,在TensorFlow上训练一个多层卷积神经网络. 下载并导入mnist数据集 首 ...

  3. 安装 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 ...

  4. 解决tensorflow Saver.restore()无效的问题

    解决tensorflow 的 Saver.restore()无法从本地读取变量的问题 最近做tensorflow 手写数字识别的时候遇到了一个问题,Saver的restore()方法无法从本地恢复变量 ...

  5. tensorflow分布式训练

    https://blog.csdn.net/hjimce/article/details/61197190  tensorflow分布式训练 https://cloud.tencent.com/dev ...

  6. Tensorflow Mask-RCNN训练识别箱子的模型运行结果(练习)

    Tensorflow Mask-RCNN训练识别箱子的模型

  7. 在 C/C++ 中使用 TensorFlow 预训练好的模型—— 间接调用 Python 实现

    现在的深度学习框架一般都是基于 Python 来实现,构建.训练.保存和调用模型都可以很容易地在 Python 下完成.但有时候,我们在实际应用这些模型的时候可能需要在其他编程语言下进行,本文将通过 ...

  8. 利用阿里云容器服务打通TensorFlow持续训练链路

    本系列将利用Docker和阿里云容器服务,帮助您上手TensorFlow的机器学习方案 第一篇:打造TensorFlow的实验环境 第二篇:轻松搭建TensorFlow Serving集群 第三篇:打 ...

  9. 在C#下使用TensorFlow.NET训练自己的数据集

    在C#下使用TensorFlow.NET训练自己的数据集 今天,我结合代码来详细介绍如何使用 SciSharp STACK 的 TensorFlow.NET 来训练CNN模型,该模型主要实现 图像的分 ...

随机推荐

  1. 紧急救援 L2-001 dijkstra 打印路径 最短路条数 权值

    较为复杂的dijkstra 包含路径打印  最小路的条数  最小路径的情况下取最大权值 v0要是标记就会出错...? 有权值的题目  不能设置mp[i][i]为0  否则会无限加权 这题很有参考价值 ...

  2. ref:Spring JdbcTemplate+JdbcDaoSupport实例

    ref:https://www.yiibai.com/spring/spring-jdbctemplate-jdbcdaosupport-examples.html 在Spring JDBC开发中,可 ...

  3. 001.Parted工具使用

    一 Parted简介 1.1 parted和fdisk 通常使用较多的磁盘管理工具为fdisk,但由于磁盘越来越廉价,且磁盘空间越来越大,而fdisk工具分区存在大小限制,只能划分小于2T的磁盘.因此 ...

  4. 001.LVM简介

    一 概念 LVM是 Logical Volume Manager(逻辑卷管理)的简写,它由Heinz Mauelshagen在Linux 2.4内核上实现.LVM将一个或多个硬盘的分区在逻辑上集合,相 ...

  5. 数据包编辑工具bittwiste

    数据包编辑工具bittwiste   bittwiste是数据包重放工具bittwist的一个工具.该工具可以编辑修改PCAP抓包文件.该工具提供数据包过滤功能,如根据范围和时间过滤.同时,该工具支持 ...

  6. Codeforces Round #368 (Div. 2) E. Garlands 二维树状数组 暴力

    E. Garlands 题目连接: http://www.codeforces.com/contest/707/problem/E Description Like all children, Ale ...

  7. Linux——多线程下解决生产消费者模型

    我们学习了操作系统,想必对生产消费者问题都不陌生.作为同步互斥问题的一个经典案例,生产消费者模型其实是解决实际问题的基础模型,解决很多的实际问题都会依赖于它.而此模型要解决最大的问题便是同步与互斥.而 ...

  8. spring data redis的配置类RedisConfig

    package com.tz.config; import org.springframework.context.annotation.Bean; import org.springframewor ...

  9. CoreSight™ Technology

    ARM Cortex-M processor-based devices use the ARM CoreSight technology which introduces powerful new  ...

  10. poj-3352-Road Construction-缩点

    做法: 把所有的边双联通分量缩成一个点. 之后建树,然后求出这个树中度为1的点. #include<stdio.h> #include<iostream> #include&l ...