Keras与PyTorch实现的DNN模型AUC结果差异问题咨询
PyTorch与Keras DNN模型差异分析及AUC结果差异原因
你用PyTorch和Keras实现的DNN模型存在多处关键差异,这些差异是导致AUC结果显著不同的核心原因,具体如下:
1. Embedding层实现错误(最关键差异)
- Keras代码中,每个类别特征都单独创建了对应维度的Embedding层:遍历
categorical_embed_sizes列表,为每个特征(类别数为categorical_embed_sizes[i])创建输出维度为8的Embedding层,这是正确的处理方式。 - PyTorch代码中,Embedding层的实现完全错误:
self.embedding = nn.Embedding(self.categorical_embed_sizes, self.categorical_embed_dim)nn.Embedding的第一个参数要求是单个特征的类别总数,但你传入了整个类别数列表categorical_embed_sizes,这会导致Embedding层初始化异常,无法正确处理多类别特征的嵌入。正确的做法应该和Keras一致,为每个类别特征单独创建Embedding层,比如:
然后在forward中遍历每个Embedding层处理对应的类别特征:self.embeddings = nn.ModuleList([ nn.Embedding(size, self.categorical_embed_dim) for size in self.categorical_embed_sizes ])x_categorical_embeds = [] for i in range(self.categorical_length): embed = self.embeddings[i](x_categorical[:, i]) x_categorical_embeds.append(embed) x_categorical = torch.cat(x_categorical_embeds, dim=1)
2. 输入维度结构差异
- Keras中,连续特征被Reshape为
(1, cont_len),每个类别特征的Embedding输出是(1, 8),拼接后得到的Merge_L是3D张量(形状为(batch_size, 1, 18*8 + cont_len)),后续的Dense、PReLU、BatchNormalization都是基于这个3D张量的最后一维进行计算。 - PyTorch中,输入是2D张量(形状为
(batch_size, 18 + cont_len)),处理后得到的拼接特征是(batch_size, 18*8 + cont_len),后续层都是基于2D张量计算。虽然Keras的Dense层会自动适配3D输入,但这种维度结构的差异会导致PReLU、BatchNormalization的参数作用方式不同:- Keras的PReLU默认会为3D张量的每个位置生成独立的alpha参数;
- PyTorch的
nn.PReLU(num_parameters=256)是为2D张量的每个特征维度生成一个alpha参数,二者的参数数量和作用逻辑不一致。
3. 初始化策略差异
- Keras与PyTorch的层默认初始化方式不同:
- Embedding层:Keras默认使用
glorot_uniform初始化,PyTorch默认使用均值为0、标准差为1的正态分布初始化; - Dense/Linear层:Keras默认
glorot_uniform,PyTorch默认kaiming_uniform。
初始化的差异会影响模型的初始收敛速度,但多次实验后仍存在显著差异,说明核心问题还是结构错误(比如Embedding层的实现)。
- Embedding层:Keras默认使用
4. 优化器细节差异
- Keras的Adam优化器默认
epsilon=1e-07,而PyTorch的Adam默认epsilon=1e-08,虽然差异细微,但在某些场景下可能影响训练的数值稳定性,不过这不是导致AUC差异的主要原因。
修复建议
- 优先修正PyTorch的Embedding层实现,确保每个类别特征对应独立的Embedding层;
- 对齐Keras和PyTorch的输入维度结构,比如将PyTorch的输入处理为3D张量,或者将Keras的拼接结果Reshape为2D;
- 手动设置一致的初始化策略(比如都使用
glorot_uniform或kaiming_normal); - 对齐优化器的所有参数(包括学习率、betas、epsilon等)。
内容的提问来源于stack exchange,提问作者Junming Liang
相关产品推荐
相关产品推荐

