分享

Paddle报错的解决方案(持续更新)

 hncdman 2022-05-25 发布于湖南



本文总结了我在使用Paddle Paddle过程中,遇到的各种疑难问题及解决方法。

蒟蒻预告:本人很菜,遇到的问题也很基础。

问题一

exe.run(program=fluid.default_main_program(), fetch_list=[y1])

报错内容:[operator < fetch > error]

解决方法:加上初始化代码

##程序初始化##

paddle.enable_static()

# main_program = paddle.static.Program()

# startup_program = paddle.static.Program()

————————————————



问题一

 self.output = paddle.layer.fc(

            input=[self.linear_part, self.interaction_part],

            size=1,

            act=paddle.activation.Sigmoid(),

            param_attr=paddle.attr.ParamAttr(

                name="%s_fc_output_linear_part.w" % self.network_name,

                is_static=is_subnet_param_static,

                l2_rate=self.l2_rate,

            ),

            bias_attr=paddle.attr.ParamAttr(

                name="%s_fc_output_linear_part.b" % self.network_name,

                is_static=is_subnet_param_static,

                l2_rate=self.l2_rate,

            )

        )

1

2

报错如下:

File "/python/lib/python2.7/site-packages/paddle/trainer/config_parser.py", line 4341, in my_fatal

raise Exception()


原因如下:

When the name field of param_attr is manually specified and the input is a list, the param_attr should also be a list with each item being the param_attr for each input item. If only one named param_attr is provided, all the input items would share this parameter.

但由于fc_layer的更新,使得不能默认的共享参数,导致报错。

解决方法:

若代码设定param_attr,而input是个list,param_attr也设置成list,即可解决。

参考:

https://github.com/PaddlePaddle/models/issues/512

问题二

报错如下:

File "/python/lib/python2.7/site-packages/paddle/trainer_config_helpers/layers.py", line 7599, in factorization_machine  assert isinstance(input, LayerOutput)

AssertionError

1

2

报错原因:

paddle.layer.factorization_machine不支持input为list

问题三

报错如下:

报错原因:

concat数据的类型不同,有sparse和dense。

参考:

https://github.com/PaddlePaddle/Paddle/issues/3338

问题四

在使用paddle v2的factorization_machine时遇到如下两种错误:

first_order = paddle.layer.fc(input=input_layer, size=1, act=paddle.activation.Linear())

second_order = paddle.layer.factorization_machine(

     input=input_layer,

     factor_size=128,

     act=paddle.activation.Linear(),

     param_attr=paddle.attr.Param(name="SparseFeatFactors"))

 self.output = paddle.layer.addto(

     input=[first_order, second_order],

     act=paddle.activation.Linear(),

     bias_attr=False)


报错一:

原因如下:

在addto层没有设置激活函数(Linear即不做任何激活),应该添加激活函数Sigmoid/Softmax。

报错二:

解决方法:

此处batch size设置为1,当第一次回传时报错,将factor_size修改成512后,在第2个epoch报错,修改成1024后没有报错(暂不知原因)。

报错三:

当用MPI集群跑时,报错Floating point exception。

可能原因如下:

1)在Paddle里面,并没有计算每条样本的平均梯度,而是使用所有样本的整体梯度去更新网络,如果batch太大,会导致梯度爆炸

2)输入数据中存在NAN

解决方法:

1)改小batch_size

2)将学习率改成e-2/batch_size

3)排查输入数据

参考文献:

https://github.com/jacquesqiao/Paddle/wiki/Paddle-Float-Point-exception的问题原因

https://github.com/PaddlePaddle/Paddle/issues/13547

问题五

报错如下:

Check failed: in_->ids

1

可能原因如下:

某个layer的输入类型错误

参考文献:

https://github.com/PaddlePaddle/Paddle/issues/2867

问题六

报错如下:

可能原因如下:

输入数据有空

问题七

报错如下:

输入层

self.words_data = paddle.layer.data(

            name="words_data",

            type=paddle.data_type.integer_value_sequence(self.words_dim)

        )

报错层        

    def create_user_rnn(self, input_data):

        source_embedding = paddle.layer.embedding(

            input=input_data,

            size=self.user_embedding_size)

        source_vec = paddle.networks.bidirectional_gru(

            input=source_embedding,

            size=self.gru_cnn_size,

            fwd_act=paddle.activation.Tanh(),

            fwd_gate_act=paddle.activation.Sigmoid(),

            bwd_act=paddle.activation.Tanh(),

            bwd_gate_act=paddle.activation.Sigmoid())

        return source_vec



原因如下:

在rnn中输入的某条数据为空,[],但是在CNN中存在输入数据为空,不会报错(不知为何)。

问题八

报错如下:

原因如下:

1)https://github.com/PaddlePaddle/Paddle/issues/2062 ,定义input layer类型不对,应该定义为sequence类型;

2)输入数据,必须是两个元素以上,比如,feeding={“left_query”:0}报错,feeding={“left_query”:0,“line”:1}解决问题,yield数据时,增加了一个元素line,feeding时若不需要line,可以不用添加,此处为了说明yield数据不能为一个元素;

问题九

param_attrs = paddle.attr.ParamAttr(

            name="%s_fc_output_for_sparse.w" % (self.network_name),

            is_static=is_subnet_param_static,

            l2_rate=self.l2_rate,

        ),

        if isinstance(self.last_hidden_layer, collections.Sequence):

            param_attrs = [param_attrs]

            param_attrs.append(

                paddle.attr.ParamAttr(

                    name="%s_fc_output_for_dense.w" % (self.network_name),

                    is_static=is_subnet_param_static,

                    l2_rate=self.l2_rate,

                )

            )

        self.output = paddle.layer.fc(

            input=self.last_hidden_layer,

            size=1,

            act=paddle.activation.Sigmoid(),

            param_attr=param_attrs,

            bias_attr=paddle.attr.ParamAttr(

                name="%s_fc_output_b" % (self.network_name),

                is_static=is_subnet_param_static,

                l2_rate=self.l2_rate,

            )

        )


原因如下:fc输入是list,所以param也需要是list,定义param_attrs时候多了个","。

param_attrs = paddle.attr.ParamAttr(

            name="%s_fc_output_for_sparse.w" % (self.network_name),

            is_static=is_subnet_param_static,

            l2_rate=self.l2_rate,

        )

————————————————

版权声明:本文为CSDN博主「沉香屑_」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/qq_23142123/article/details/89405261

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多