【发布时间】:2020-08-09 18:33:29
【问题描述】:
我正在尝试在 keras 中模仿 pytorch 神经网络。
我确信我的 keras 版本的神经网络与 pytorch 中的非常接近,但是在训练期间,我发现 pytorch 网络的损失值远低于 keras 网络的损失值。不知道是不是因为我没有正确复制keras中的pytorch网络或者两个框架的loss计算不一样。
Pytorch 损失定义:
loss_function = nn.CrossEntropyLoss()
optimizer = optim.SGD(net.parameters(), lr=args.lr, momentum=0.9, weight_decay=5e-4)
Keras 损失定义:
sgd = optimizers.SGD(lr=.1, momentum=0.9, nesterov=True)
resnet.compile(loss='categorical_crossentropy', optimizer=sgd, metrics=['categorical_accuracy'])
请注意,keras 网络中的所有层都已使用 L2 正则化 kernel_regularizer=regularizers.l2(5e-4) 实现,我还使用了 he_uniform 初始化,我认为这是 pytorch 中的默认值,根据 source code。
两个网络的批量大小相同:128。
在 pytorch 版本中,我得到大约 4.1209 的损失值,它减少到大约 0.5。在 keras 中,它从 30 左右开始,然后减少到 2.5。
【问题讨论】:
标签: keras deep-learning neural-network pytorch