相关疑难解决方法(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中获得可重现的结果

每次我imdb_lstm.py从Keras框架运行示例时,我得到不同的结果(测试准确性)(https://github.com/fchollet/keras/blob/master/examples/imdb_lstm.py)代码包含np.random.seed(1337)在顶部,在任何keras之前进口.它应该防止它为每次运行生成不同的数字.我错过了什么?

更新:如何重现:

  1. 安装Keras(http://keras.io/)
  2. 执行https://github.com/fchollet/keras/blob/master/examples/imdb_lstm.py 几次.它将训练模型并输出测试精度.
    预期结果:每次运行的测试精度都相同.
    实际结果:每次运行的测试精度都不同.

UPDATE2:我在Windows 8.1上使用MinGW/msys运行它,模块版本:
theano 0.7.0
numpy 1.8.1
scipy 0.14.0c1

更新3:我把问题缩小了一点.如果我用GPU运行示例(设置theano flag device = gpu0),那么每次都会得到不同的测试精度,但是如果我在CPU上运行它,那么一切都按预期工作.我的显卡:NVIDIA GeForce GT 635)

python numpy theano keras

62
推荐指数
6
解决办法
2万
查看次数

为什么np.dot不精确?(n维数组)

假设我们采用np.dot两个'float32'2D数组:

res = np.dot(a, b)   # see CASE 1
print(list(res[0]))  # list shows more digits
Run Code Online (Sandbox Code Playgroud)
[-0.90448684, -1.1708503, 0.907136, 3.5594249, 1.1374011, -1.3826287]
Run Code Online (Sandbox Code Playgroud)

数字。除了它们可以更改:


案例1:切片a

np.random.seed(1)
a = np.random.randn(9, 6).astype('float32')
b = np.random.randn(6, 6).astype('float32')

for i in range(1, len(a)):
    print(list(np.dot(a[:i], b)[0])) # full shape: (i, 6)
Run Code Online (Sandbox Code Playgroud)
[-0.9044868,  -1.1708502, 0.90713596, 3.5594249, 1.1374012, -1.3826287]
[-0.90448684, -1.1708503, 0.9071359,  3.5594249, 1.1374011, -1.3826288]
[-0.90448684, -1.1708503, 0.9071359,  3.5594249, 1.1374011, -1.3826288]
[-0.90448684, -1.1708503, 0.907136,   3.5594249, 1.1374011, -1.3826287]
[-0.90448684, -1.1708503, 0.907136,   3.5594249, 1.1374011, -1.3826287] …
Run Code Online (Sandbox Code Playgroud)

c python arrays precision numpy

15
推荐指数
1
解决办法
437
查看次数

tf.keras和tf.python.keras有什么区别?

我遇到了严重的不兼容性问题,因为相同的代码在一个代码与另一个代码之间却发生了冲突。例如:

Github的源代码来看,这些模块及其导入看起来完全相同,tf.keras甚至从中导入也是如此tf.python.keras。在教程中,我看到两者都经常使用。例如,下面的代码将失败tf.python.keras

这是怎么回事?有什么区别,什么时候应该使用其中一个?


from tensorflow.keras.layers import Input, Dense
from tensorflow.keras.models import Model
from tensorflow.keras.optimizers import Nadam
import numpy as np

ipt   = Input(shape=(4,))
out   = Dense(1, activation='sigmoid')(ipt)
model = Model(ipt, out)
model.compile(optimizer=Nadam(lr=1e-4), loss='binary_crossentropy')

X = np.random.randn(32,4)
Y = np.random.randint(0,2,(32,1))
model.train_on_batch(X,Y)
Run Code Online (Sandbox Code Playgroud)

附加信息

  • CUDA 10.0.130,cuDNN 7.4.2,Python 3.7.4,Windows 10
  • tensorflowtensorflow-gpuv2.0.0和Keras 2.3.0(通过pip),其他所有通过Anaconda 3

python keras tensorflow tensorflow2.0

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

tf.keras.losses 中“BinaryCrossentropy”和“binary_crossentropy”的区别?

我正在使用 tf.GradientTape() 使用 TensorFlow 2.0 训练模型,但我发现模型的准确性为95%如果我使用tf.keras.losses.BinaryCrossentropy,但75%如果我使用 则降级为tf.keras.losses.binary_crossentropy。所以我对这里相同指标的差异感到困惑?

import pandas as pd
import numpy as np
import tensorflow as tf
from tensorflow.keras import layers

from sklearn.model_selection import train_test_split

def read_data():
    red_wine = pd.read_csv("https://archive.ics.uci.edu/ml/machine-learning-databases/wine-quality/winequality-red.csv", sep=";")
    white_wine = pd.read_csv("https://archive.ics.uci.edu/ml/machine-learning-databases/wine-quality/winequality-white.csv", sep=";")
    red_wine["type"] = 1
    white_wine["type"] = 0
    wines = red_wine.append(white_wine)
    return wines

def get_x_y(df):
    x = df.iloc[:, :-1].values.astype(np.float32)
    y = df.iloc[:, -1].values.astype(np.int32)
    return x, y

def build_model():
    inputs = layers.Input(shape=(12,))
    dense1 = layers.Dense(12, activation="relu", name="dense1")(inputs)
    dense2 …
Run Code Online (Sandbox Code Playgroud)

python tensorflow tf.keras

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