相关疑难解决方法(0)

为什么TensorFlow 2比TensorFlow 1慢得多?

许多用户都将其作为切换到Pytorch的原因,但是我还没有找到牺牲/最渴望的实用质量,速度和执行力的理由/解释。

以下是代码基准测试性能,即TF1与TF2的对比-TF1的运行速度提高了47%至276%

我的问题是:在图形或硬件级别上,什么导致如此显着的下降?


寻找详细的答案-已经熟悉广泛的概念。相关的Git

规格:CUDA 10.0.130,cuDNN 7.4.2,Python 3.7.4,Windows 10,GTX 1070


基准测试结果


UPDATE:禁用每下面的代码不会急于执行没有帮助。但是,该行为是不一致的:有时以图形方式运行有很大帮助,而其他时候其运行速度相对于Eager

由于TF开发人员没有出现在任何地方,因此我将自己进行调查-可以跟踪相关的Github问题的进展。

更新2:分享大量实验结果,并附有解释;应该在今天完成。


基准代码

# use tensorflow.keras... to benchmark tf.keras; used GPU for all above benchmarks
from keras.layers import Input, Dense, LSTM, Bidirectional, Conv1D
from keras.layers import Flatten, Dropout
from keras.models import Model
from keras.optimizers import Adam
import keras.backend as K
import numpy as np
from time import time

batch_shape = (32, 400, 16) …
Run Code Online (Sandbox Code Playgroud)

python performance-testing keras tensorflow tensorflow2.0

94
推荐指数
2
解决办法
4140
查看次数

为什么这个 tensorflow 训练需要这么长时间?

我正在通过Deep Reinforcement Learning in Action一书学习 DRL 。在第 3 章中,他们展示了简单游戏 Gridworld(此处的说明,在规则部分)以及PyTorch 中的相应代码。

我已经对代码进行了试验,用 89% 的胜利(在训练后赢得 100 场比赛中的 89 场)训练网络只需不到 3 分钟。

使用 pytorch 训练损失

作为练习,我已将代码迁移到tensorflow。所有代码都在这里

问题是,使用我的 tensorflow 端口,以 84% 的胜率训练网络需要将近 2 个小时。两个版本都使用唯一的 CPU 进行训练(我没有 GPU)

用张量流训练损失

训练损失数字似乎是正确的,也是获胜率(我们必须考虑到游戏是随机的,可能有不可能的状态)。问题是整个过程的性能。

我正在做一些非常错误的事情,但是什么?

主要区别在于训练循环,在火炬中是这样的:

        loss_fn = torch.nn.MSELoss()
        learning_rate = 1e-3
        optimizer = torch.optim.Adam(model.parameters(), lr=learning_rate)
        ....
        Q1 = model(state1_batch) 
        with torch.no_grad():
            Q2 = model2(state2_batch) #B
        
        Y = reward_batch + gamma * ((1-done_batch) * torch.max(Q2,dim=1)[0])
        X = Q1.gather(dim=1,index=action_batch.long().unsqueeze(dim=1)).squeeze()
        loss = loss_fn(X, Y.detach()) …
Run Code Online (Sandbox Code Playgroud)

python performance deep-learning tensorflow pytorch

9
推荐指数
1
解决办法
301
查看次数