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
报错如下:
报错原因:
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
可能原因如下:
某个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,
)