gpt4 book ai didi

tensorflow - ImageNet 预训练的 ResNet50 主干在 Pytorch 和 TensorFlow 之间有所不同

转载 作者:行者123 更新时间:2023-12-04 13:52:54 29 4
gpt4 key购买 nike

“显然!”,您可能会说……但是有一个显着差异,我无法通过随机初始化的差异来解释。
取两个预训练的 basenet(在平均池化层之前)并用相同的图像馈送它们,您会注意到输出特征不遵循相同的分布。具体来说, TensorFlow 相比,ReLU 的主干具有更多抑制特征pytorch 的脊梁。此外,如第三张图所示,两个框架之间的动态范围不同。
Features distribution
当然,这种差异被解决分类任务的密集层吸收了,但是:这种差异可以用训练过程中的随机性来解释吗?还是训练时间?或者还有什么可以解释这种差异的原因吗?
重现代码:

import imageio
import numpy as np
image = imageio.imread("/tmp/image.png").astype(np.float32)/255

import tensorflow as tf
inputs = image[np.newaxis]
model = tf.keras.applications.ResNet50(include_top=False, input_shape=(None, None, 3))
output = model(inputs).numpy()
print(f"TensorFlow features range: [{np.min(output):.02f};{np.max(output):.02f}]")

import torchvision
import torch
model = torch.nn.Sequential(*list(torchvision.models.resnet50(pretrained=True).children())[0:8])
inputs = torch.tensor(image).permute(2,0,1).unsqueeze(0)
output = model(inputs).detach().permute(0,2,3,1).numpy()
print(f"Pytorch features range: [{np.min(output):.02f};{np.max(output):.02f}]")
输出
TensorFlow features range: [0.00;25.98]
Pytorch features range: [0.00;12.00]
注意:它类似于任何图像。

最佳答案

Keras 和 PyTorch 在标准深度学习模型的定义、修改、训练、评估和导出方面存在显着差异。对于某些部分,它纯粹是关于不同的 API 约定,而对于其他部分,则涉及抽象级别之间的根本差异。
Keras 操作很多 更高级别的抽象 .它更即插即用,通常更简洁,但以牺牲灵活性为代价。 PyTorch 提供了更明确和详细的代码。大多数情况下,它的意思是 可调试且灵活的代码 ,只有很小的开销。然而,PyTorch 中的训练更加冗长。这很痛苦,但有时提供了很大的灵活性。
除此之外,在 TensorFlow 和 PyTorch 中创建相同网络的方式是不同的。在 TensorFlow 中,一个网络 预测概率 (具有内置的 softmax 函数),其内置的成本函数假设它们使用概率。在 PyTorch 中我们有更多的自由,但首选的方式是 返回日志 .这样做是出于数字原因,执行 softmax 然后对数损失意味着执行不必要的 log(exp(x)) 操作。因此,我们不使用 softmax,而是使用 LogSoftmax(和 NLLLoss)或将它们组合成一个 nn.CrossEntropyLoss 损失函数。
Source

关于tensorflow - ImageNet 预训练的 ResNet50 主干在 Pytorch 和 TensorFlow 之间有所不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67365237/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com