本文總結(jié)了我在使用Paddle Paddle過程中,遇到的各種疑難問題及解決方法。 蒟蒻預(yù)告:本人很菜,遇到的問題也很基礎(chǔ)。 問題一 exe.run(program=fluid.default_main_program(), fetch_list=[y1]) 報(bào)錯(cuò)內(nèi)容:[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 報(bào)錯(cuò)如下: 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的更新,使得不能默認(rèn)的共享參數(shù),導(dǎo)致報(bào)錯(cuò)。 解決方法: 若代碼設(shè)定param_attr,而input是個(gè)list,param_attr也設(shè)置成list,即可解決。 參考: https://github.com/PaddlePaddle/models/issues/512 問題二 報(bào)錯(cuò)如下: 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 報(bào)錯(cuò)原因: paddle.layer.factorization_machine不支持input為list 問題三 報(bào)錯(cuò)如下: 報(bào)錯(cuò)原因: concat數(shù)據(jù)的類型不同,有sparse和dense。 參考: https://github.com/PaddlePaddle/Paddle/issues/3338 問題四 在使用paddle v2的factorization_machine時(shí)遇到如下兩種錯(cuò)誤: 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) 報(bào)錯(cuò)一: 原因如下: 在addto層沒有設(shè)置激活函數(shù)(Linear即不做任何激活),應(yīng)該添加激活函數(shù)Sigmoid/Softmax。 報(bào)錯(cuò)二: 解決方法: 此處batch size設(shè)置為1,當(dāng)?shù)谝淮位貍鲿r(shí)報(bào)錯(cuò),將factor_size修改成512后,在第2個(gè)epoch報(bào)錯(cuò),修改成1024后沒有報(bào)錯(cuò)(暫不知原因)。 報(bào)錯(cuò)三: 當(dāng)用MPI集群跑時(shí),報(bào)錯(cuò)Floating point exception。 可能原因如下: 1)在Paddle里面,并沒有計(jì)算每條樣本的平均梯度,而是使用所有樣本的整體梯度去更新網(wǎng)絡(luò),如果batch太大,會導(dǎo)致梯度爆炸 2)輸入數(shù)據(jù)中存在NAN 解決方法: 1)改小batch_size 2)將學(xué)習(xí)率改成e-2/batch_size 3)排查輸入數(shù)據(jù) 參考文獻(xiàn): https://github.com/jacquesqiao/Paddle/wiki/Paddle-Float-Point-exception的問題原因 https://github.com/PaddlePaddle/Paddle/issues/13547 問題五 報(bào)錯(cuò)如下: Check failed: in_->ids 1 可能原因如下: 某個(gè)layer的輸入類型錯(cuò)誤 參考文獻(xiàn): https://github.com/PaddlePaddle/Paddle/issues/2867 問題六 報(bào)錯(cuò)如下: 可能原因如下: 輸入數(shù)據(jù)有空 問題七 報(bào)錯(cuò)如下: 輸入層 self.words_data = paddle.layer.data( name="words_data", type=paddle.data_type.integer_value_sequence(self.words_dim) ) 報(bào)錯(cuò)層 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中輸入的某條數(shù)據(jù)為空,[],但是在CNN中存在輸入數(shù)據(jù)為空,不會報(bào)錯(cuò)(不知為何)。 問題八 報(bào)錯(cuò)如下: 原因如下: 1)https://github.com/PaddlePaddle/Paddle/issues/2062 ,定義input layer類型不對,應(yīng)該定義為sequence類型; 2)輸入數(shù)據(jù),必須是兩個(gè)元素以上,比如,feeding={“l(fā)eft_query”:0}報(bào)錯(cuò),feeding={“l(fā)eft_query”:0,“l(fā)ine”:1}解決問題,yield數(shù)據(jù)時(shí),增加了一個(gè)元素line,feeding時(shí)若不需要line,可以不用添加,此處為了說明yield數(shù)據(jù)不能為一個(gè)元素; 問題九 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時(shí)候多了個(gè)","。 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, ) ———————————————— 版權(quán)聲明:本文為CSDN博主「沉香屑_」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。 原文鏈接:https://blog.csdn.net/qq_23142123/article/details/89405261 |
|