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

问题一

 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,
            )
        )

报错如下:

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

报错原因:
paddle.layer.factorization_machine不支持input为list

问题三

报错如下:
Paddle报错的解决方案(持续更新)_第1张图片
报错原因:
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)

报错一:
Paddle报错的解决方案(持续更新)_第2张图片
原因如下:
在addto层没有设置激活函数(Linear即不做任何激活),应该添加激活函数Sigmoid/Softmax。

报错二:
Paddle报错的解决方案(持续更新)_第3张图片
解决方法:
此处batch size设置为1,当第一次回传时报错,将factor_size修改成512后,在第2个epoch报错,修改成1024后没有报错(暂不知原因)。

报错三:
Paddle报错的解决方案(持续更新)_第4张图片
当用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

可能原因如下:
某个layer的输入类型错误

参考文献:
https://github.com/PaddlePaddle/Paddle/issues/2867

问题六

报错如下:
Paddle报错的解决方案(持续更新)_第5张图片可能原因如下:
输入数据有空

问题七

报错如下:

输入层
	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

Paddle报错的解决方案(持续更新)_第6张图片
原因如下:
在rnn中输入的某条数据为空,[],但是在CNN中存在输入数据为空,不会报错(不知为何)。

问题八

报错如下:Paddle报错的解决方案(持续更新)_第7张图片
原因如下:
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,
        )

你可能感兴趣的:(算法,Paddle)