相关疑难解决方法(0)

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
查看次数

16
推荐指数
2
解决办法
764
查看次数

为什么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 model.predict 比直接 Numpy 慢?

谢谢,每个人都试图帮助我理解下面的问题。我已经更新了问题并生成了仅 CPU运行和仅 GPU运行。一般来说,在任何一种情况下,直接numpy计算似乎也比model. predict(). 希望这说明这似乎不是CPUGPU 的问题(如果是,我希望得到解释)。


让我们用 keras 创建一个训练有素的模型。

import tensorflow as tf

(X,Y),(Xt,Yt) = tf.keras.datasets.mnist.load_data()

model = tf.keras.models.Sequential([
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dense(1000,'relu'),
    tf.keras.layers.Dense(100,'relu'),
    tf.keras.layers.Dense(10,'softmax'),
])
model.compile('adam','sparse_categorical_crossentropy')
model.fit(X,Y,epochs=20,batch_size=1024)
Run Code Online (Sandbox Code Playgroud)

现在让我们model.predict使用重新创建函数numpy

import numpy as np

W = model.get_weights()

def predict(X):
    X      = X.reshape((X.shape[0],-1))           #Flatten
    X      = X @ W[0] + W[1]                      #Dense
    X[X<0] = 0                                    #Relu
    X      = X @ W[2] + W[3]                      #Dense
    X[X<0] = 0                                    #Relu …
Run Code Online (Sandbox Code Playgroud)

python numpy deep-learning keras tensorflow

8
推荐指数
2
解决办法
969
查看次数

Keras 模型训练内存泄漏

我是 Keras、Tensorflow、Python 的新手,我正在尝试构建一个供个人使用/未来学习的模型。我刚开始使用 python,我想出了这段代码(在视频和教程的帮助下)。我的问题是,我对 Python 的内存使用量随着每个 epoch 甚至在构建新模型之后慢慢增加。一旦内存达到 100%,训练就会停止,没有错误/警告。我不太了解,但问题应该在循环内的某个地方(如果我没记错的话)。我知道

k.clear.session()

但问题要么没有被删除,要么我不知道如何将它集成到我的代码中。我有:Python v 3.6.4、Tensorflow 2.0.0rc1(cpu 版本)、Keras 2.3.0

这是我的代码:

import pandas as pd
import os
import time
import tensorflow as tf
import numpy as np
import keras
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout, LSTM, BatchNormalization
from tensorflow.keras.callbacks import TensorBoard, ModelCheckpoint

EPOCHS = 25
BATCH_SIZE = 32           

df = pd.read_csv("EntryData.csv", names=['1SH5', '1SHA', '1SA5', '1SAA', '1WH5', '1WHA',
                                         '2SA5', '2SAA', '2SH5', '2SHA', '2WA5', '2WAA',
                                         '3R1', '3R2', '3R3', '3R4', '3R5', '3R6',
                                         'Target'])

df_val …
Run Code Online (Sandbox Code Playgroud)

python memory checkpoint keras tensorflow

6
推荐指数
1
解决办法
6795
查看次数

TensorFlow 和 Keras 入门:过去 (TF1) 现在 (TF2)

这个问题的目的是寻求一个最低限度的指南,让某人快速了解 TensorFlow 1 和 TensorFlow 2。我觉得没有一个连贯的指南来解释 TF1 和 TF2 之间的差异,并且 TF 已经通过了专业修订和快速发展。

我说的时候供参考,

  • v1 或 TF1 - 我指的是 TF 1.15.0
  • v2 或 TF2 - 我指的是 TF 2.0.0

我的问题是,

  • TF1/TF2 如何工作?它们的主要区别是什么?

  • TF1 和 TF2 中有哪些不同的数据类型/数据结构?

  • 什么是 Keras,它如何适应所有这些?Keras 提供了哪些不同的 API 来实现深度学习模型?你能提供每个例子吗?

  • 在使用 TF 和 Keras 时,我必须注意的最经常出现的警告/错误是什么?

  • TF1 和 TF2 之间的性能差异

python machine-learning keras tensorflow tensorflow2.0

6
推荐指数
1
解决办法
1889
查看次数

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
查看次数

批量标准化,是还是否?

我使用Tensorflow 1.14.0和Keras 2.2.4。以下代码实现了一个简单的神经网络:

import numpy as np
np.random.seed(1)
import random
random.seed(2)
import tensorflow as tf
tf.set_random_seed(3)

from tensorflow.keras.models import Model, Sequential
from tensorflow.keras.layers import Input, Dense, Activation


x_train=np.random.normal(0,1,(100,12))

model = Sequential()
model.add(Dense(8, input_shape=(12,)))
# model.add(tf.keras.layers.BatchNormalization())
model.add(Activation('linear'))
model.add(Dense(12))
model.add(Activation('linear'))
model.compile(optimizer='adam', loss='mean_squared_error')
model.fit(x_train, x_train,epochs=20, validation_split=0.1, shuffle=False,verbose=2)
Run Code Online (Sandbox Code Playgroud)

20个纪元后的最终val_loss为0.7751。当我取消注释添加批处理规范化层的唯一注释行时,val_loss更改为1.1230。

我的主要问题是方法更复杂,但同样的事情也会发生。由于激活是线性的,因此在激活之后还是之前将批处理归一化都没关系。

问题:为什么批量规范化无济于事?有什么我可以更改的,以便批量标准化可以在不更改激活功能的情况下改善结果吗?

收到评论后更新:

具有一个隐藏层和线性激活的NN类似于PCA。有大量的论文。对我来说,此设置在隐藏层和输出的所有激活功能组合中提供的MSE最小。

声明线性激活的某些资源表示PCA:

https://arxiv.org/pdf/1702.07800.pdf

https://link.springer.com/article/10.1007/BF00275687

https://www.quora.com/How-can-I-make-a-neural-network-to-work-as-a-PCA

python neural-network keras batch-normalization

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

使用 import keras 和 import tensorflow.keras 之间的区别?

我一直在我的笔记本电脑上使用tensorflow作为CPU,由于速度太慢,我决定转移到我的台式电脑并使用tensorflow作为gpu。

问题是,在我的台式计算机中,我无法像这样导入,但我可以在笔记本电脑上执行以下操作:

from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.layers import Dropout, Flatten, Dense
from tensorflow.keras.applications import MobileNetV2
Run Code Online (Sandbox Code Playgroud)

所以我决定使用带有tensorflow-gpu作为后端的keras模块,所以我在桌面上的导入如下所示:

from keras.preprocessing.image import ImageDataGenerator
from keras.layers import Dropout, Flatten, Dense
from keras.applications import MobileNetV2
Run Code Online (Sandbox Code Playgroud)

另外,我在笔记本电脑上的 conda 列表如下所示:

keras                     2.3.1                    pypi_0    pypi
keras-applications        1.0.8                      py_0
keras-preprocessing       1.1.0                      py_1
tensorboard               2.1.0                     py3_0
tensorflow                2.1.0           eigen_py36hdbbabfe_0
tensorflow-base           2.1.0           eigen_py36h49b2757_0
tensorflow-estimator      2.1.0              pyhd54b08b_0
Run Code Online (Sandbox Code Playgroud)

我在桌面上的 conda 列表如下所示:

keras                     2.3.1                    pypi_0    pypi
keras-applications        1.0.8                      py_0
keras-preprocessing       1.1.0                      py_1
tensorboard               2.1.0                     py3_0
tensorflow                2.1.0           gpu_py36h3346743_0
tensorflow-base           2.1.0           gpu_py36h55f5790_0
tensorflow-estimator      2.1.0 …
Run Code Online (Sandbox Code Playgroud)

python keras tensorflow

5
推荐指数
2
解决办法
2131
查看次数

Anaconda 安装 TensorFlow 1.15 而不是 2.0

我一直在尝试在 Anaconda 中安装 Tensorflow 2.0。

到目前为止,tensorflow 工作正常(我可以在我的代码中使用该库),但是当我安装它时,它说“安装版本:2.0”,然后我得到了 1.15 版。

整个包结果可更新(因为 versione 2.0 确实存在并且应该可用),但即使我尝试更新它,我也会不断得到 1.15,它又回到了可更新状态,我又回到了循环中。

我从 Anaconda Navigator 界面和使用提示都尝试过conda update tensorflow,但没有成功。

这是链接包:tensorflow 2.0 Anaconda

我该如何解决问题?

编辑 :

我成功安装了 TensorFlow 2.0 使用conda install -c anaconda tensorflow. 然后我回到 Anaconda Navigator 并尝试安装 Keras 2.2.4。

查看已安装的软件包,似乎安装 Keras 会用 1.15 覆盖 TensorFlow 2.0 版,我错了吗?这是一个错误吗?

这是图片: 安装 Keras

python anaconda tensorflow

4
推荐指数
2
解决办法
3万
查看次数

如果 Keras 结果不可重复,那么比较模型和选择超参数的最佳做法是什么?

更新:这个问题是针对 Tensorflow 1.x 的。我升级到 2.0 并且(至少在下面的简单代码中)重现性问题似乎已在 2.0 上解决。这样就解决了我的问题;但我仍然很好奇 1.x 上针对此问题使用了哪些“最佳实践”。

在 keras/tensorflow 上训练完全相同的模型/参数/数据不会给出可重复的结果,并且每次训练模型时损失都显着不同。有很多关于此的 stackoverflow 问题(例如,如何在 keras 中获得可重现的结果),但推荐的解决方法似乎对我或 StackOverflow 上的许多其他人不起作用。好的,就是这样。

但是考虑到 keras 在张量流上的不可重复性的限制——比较模型和选择超参数的最佳实践是什么?我正在测试不同的架构和激活,但由于每次的损失估计都不同,我永远不确定一个模型是否比另一个更好。是否有处理此问题的最佳做法?

我认为这个问题与我的代码没有任何关系,但以防万一;这是一个示例程序:

import os
#stackoverflow says turning off the GPU helps reproducibility, but it doesn't help for me
os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID"
os.environ["CUDA_VISIBLE_DEVICES"] = ""
os.environ['PYTHONHASHSEED']=str(1)

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

#StackOverflow says this is needed for reproducibility but it doesn't help for …
Run Code Online (Sandbox Code Playgroud)

python reproducible-research keras tensorflow

3
推荐指数
2
解决办法
2231
查看次数