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

  • 问题描述:使用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)区间内,可以看成概率来理解,从而来进行多分类,直观解释如下图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值