相关疑难解决方法(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
查看次数

Keras 不一致的预测时间

我试图估计我的 keras 模型的预测时间并意识到一些奇怪的事情。除了正常情况下相当快之外,模型每隔一段时间需要很长时间才能做出预测。不仅如此,这些时间也会随着模型运行的时间而增加。我添加了一个最小的工作示例来重现错误。

import time
import numpy as np
from sklearn.datasets import make_classification
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Flatten

# Make a dummy classification problem
X, y = make_classification()

# Make a dummy model
model = Sequential()
model.add(Dense(10, activation='relu',name='input',input_shape=(X.shape[1],)))
model.add(Dense(2, activation='softmax',name='predictions'))
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])

model.fit(X, y, verbose=0, batch_size=20, epochs=100)

for i in range(1000):
    # Pick a random sample
    sample = np.expand_dims(X[np.random.randint(99), :], axis=0)
    # Record the prediction time 10x and then take the average
    start = time.time() …
Run Code Online (Sandbox Code Playgroud)

python performance keras tensorflow tensorflow2.0

19
推荐指数
1
解决办法
1932
查看次数

何时在张量流中使用 model.predict(x) 与 model(x)

我有一个keras.models.Model我加载的tf.keras.models.load_model.

现在有两种选择来使用这个模型。我可以打电话model.predict(x),也可以打电话model(x).numpy()。两个选项都给出相同的结果,但model.predict(x)运行时间要长 10 倍以上。

源代码中的注释指出:

计算是分批进行的。该方法专为大规模输入的性能而设计 。对于适合一批的少量输入,__call__建议直接使用以加快执行速度,例如 model(x), 或model(x, training=False)

我已经测试过x包含 1; 1,000,000;和 10,000,000 行,model(x)仍然表现更好。

输入需要有多大才能被归类为大规模输入,并且性能model.predict(x)更好?

keras tensorflow

5
推荐指数
1
解决办法
4348
查看次数

TensorFlow 中的实验是什么意思?

TensorFlow 2.0 API中,有一个模块tf.experimental。这样的名字也出现在其他地方,比如tf.data.experimental。我只是想知道设计这些模块的动机是什么。

tensorflow tensorflow-datasets tensorflow2.0

4
推荐指数
1
解决办法
1137
查看次数