本文总结了我在使用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 |
|