使用PaddlePaddle训练神经网络时,没有报错,但输出结果一直为nan

原创
2019/01/31 17:11
阅读数 849
  • 问题描述:使用PaddlePaddle训练神经网络时,没有报错,但输出结果一直为nan

  • 报错信息:

Train cost, Step 0, Cost nan
Train cost, Step 100, Cost nan
Train cost, Step 200, Cost nan
Train cost, Step 300, Cost nan
Train cost, Step 400, Cost nan
Train cost, Step 500, Cost nan
Train cost, Step 600, Cost nan
Train cost, Step 700, Cost nan
  • 问题复现
def train_program():
    # feature vector of length 13
    x = fluid.layers.data(name='x', shape=[11], dtype='float32')
    y_predict = fluid.layers.fc(input=x, size=6, act=None)

    y = fluid.layers.data(name='y', shape=[1], dtype='int64')
    loss = fluid.layers.cross_entropy(input=y_predict, label=y)
    avg_loss = fluid.layers.mean(loss)

    return avg_loss
  • 问题分析:神经网络的输出结果与神经网络的最后一层有很大的关系,因为整个神经网络的输出结果其实就是最后一层结构的输出结构,根据描述,网络在训练运行时并没有报错,但输出与预期不符合,很有可能就是最后一层没有使用正确的激活函数。

  • 问题解决:
    从报错代码端中可以看出,最后一层y_predict的act参数为None,即没有使用激活函数,这很可能导致神经网络输出错误结果,在最后一层使用Softmax激活函数

def train_program():
    # feature vector of length 13
    x = fluid.layers.data(name='x', shape=[11], dtype='float32')
    y_predict = fluid.layers.fc(input=x, size=6, act='softmax')

    y = fluid.layers.data(name='y', shape=[1], dtype='int64')
    loss = fluid.layers.cross_entropy(input=y_predict, label=y)
    avg_loss = fluid.layers.mean(loss)

    return avg_loss
  • 问题拓展:softmax用于多分类过程中,它将多个神经元的输出,映射到(0,1)区间内,可以看成概率来理解,从而来进行多分类,直观解释如下图:

本文分享 CSDN - 飞桨PaddlePaddle。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
0 评论
0 收藏
0
分享
返回顶部
顶部