- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写一些代码来优化神经网络架构,因此有一个 python 函数 create_nn(parms)
来创建和初始化 keras 模型。然而,我遇到的问题是,经过较少的迭代后,模型的训练时间比平时要长得多(最初一个时期需要 10 秒,然后大约在第 14 个模型之后(每个模型训练 20 个时期)需要 60 秒/时代)。我知道这不是因为不断发展的架构,因为如果我重新启动脚本并开始它结束的情况,它就会恢复到正常速度。
我正在运行
from keras import backend as K
然后是
K.clear_session()
训练任何给定的新模型后。
一些其他详细信息:
对于前 12 个模型,每个时期的训练时间大致保持在 10 秒/时期。然后,在第 13 个模型中,每个 epoch 的训练时间稳步攀升至 60 秒。然后每个 epoch 的训练时间徘徊在 60 秒/epoch 左右。
我正在运行 keras,并以 Tensorflow 作为后端
我正在使用 Amazon EC2 t2.xlarge 实例
有足够的可用 RAM(7GB 可用,带有 5GB 大小的数据集)
我删除了一堆层和参数,但基本上 create_nn
看起来像:
def create_nn(features, timesteps, number_of_filters):
inputs = Input(shape = (timesteps, features))
x = GaussianNoise(stddev=0.005)(inputs)
#Layer 1.1
x = Convolution1D(number_of_filters, 3, padding='valid')(x)
x = Activation('relu')(x)
x = Flatten()(x)
x = Dense(10)(x)
x = BatchNormalization()(x)
x = Activation('relu')(x)
x = Dropout(0.5)(x)
# Output layer
outputs = Dense(1, activation='sigmoid')(x)
model = Model(inputs=inputs, outputs=outputs)
# Compile and Return
model.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy'])
print('CNN model built succesfully.')
return model
请注意,虽然Sequential
模型可以在这个虚拟示例中工作,但实际用例需要功能性 API。
如何解决这个问题?
最佳答案
简短回答:您需要在创建每个新模型之前使用tf.keras.backend.clear_session()
。
此问题似乎仅在关闭急切执行时才会发生。
好吧,让我们在使用和不使用clear_session 的情况下进行实验。 make_model
的代码位于此响应的末尾。
首先,我们看一下使用clear session时的训练时间。我们将运行此实验 10 次并打印结果
non_seq_time = [ make_model(clear_session=True) for _ in range(10)]
non sequential
Elapse = 1.06039
Elapse = 1.20795
Elapse = 1.04357
Elapse = 1.03374
Elapse = 1.02445
Elapse = 1.00673
Elapse = 1.01712
Elapse = 1.021
Elapse = 1.17026
Elapse = 1.04961
如您所见,训练时间保持不变
现在让我们在不使用清晰 session 的情况下重新运行实验并查看训练时间
non_seq_time = [ make_model(clear_session=False) for _ in range(10)]
non sequential
Elapse = 1.10954
Elapse = 1.13042
Elapse = 1.12863
Elapse = 1.1772
Elapse = 1.2013
Elapse = 1.31054
Elapse = 1.27734
Elapse = 1.32465
Elapse = 1.32387
Elapse = 1.33252
如您所见,没有clear_session,训练时间会增加
# Training time increases - and how to fix it
# Setup and imports
# %tensorflow_version 2.x
import tensorflow as tf
import tensorflow.keras.layers as layers
import tensorflow.keras.models as models
from time import time
# if you comment this out, the problem doesn't happen
# it only happens when eager execution is disabled !!
tf.compat.v1.disable_eager_execution()
(x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data()
# Let's build that network
def make_model(activation="relu", hidden=2, units=100, clear_session=False):
# -----------------------------------
# . HERE WE CAN TOGGLE CLEAR SESSION
# -----------------------------------
if clear_session:
tf.keras.backend.clear_session()
start = time()
inputs = layers.Input(shape=[784])
x = inputs
for num in range(hidden) :
x = layers.Dense(units=units, activation=activation)(x)
outputs = layers.Dense(units=10, activation="softmax")(x)
model = tf.keras.Model(inputs=inputs, outputs=outputs)
model.compile(optimizer='sgd', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
results = model.fit(x_train, y_train, validation_data=(x_test, y_test), batch_size=200, verbose=0)
elapse = time()-start
print(f"Elapse = {elapse:8.6}")
return elapse
# Let's try it out and time it
# prime it first
make_model()
print("Use clear session")
non_seq_time = [ make_model(clear_session=True) for _ in range(10)]
print("Don't use clear session")
non_seq_time = [ make_model(clear_session=False) for _ in range(10)]
关于python - 每次重复后,keras 模型的训练都会变慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45796167/
我已经在谷歌上搜索这个问题一段时间了,但我还没有找到有效的解决方案。 问题是 SSH 登录到我的服务器突然变得很慢。我可以看到身份验证需要大约 10 秒才能继续,这是我的 ssh 详细日志: Open
我正在使用 AVPlayer 在我的项目中播放在线视频。视频播放良好。现在我想减少/增加视频的 fps。以下是我正在使用的代码: self.asset = [AVAsset assetWithURL:
在 Raspberry Pi 上运行两个使用 python gpio 引脚的程序时,一个变慢。一种是磁传感器,另一种是温湿度传感器。后者是放慢速度的。它不是每 2 秒打印一次温度,而是每 5 到 10
我从 Redis 向我的应用程序提供一个 json,然后我对其进行解码和循环。 这是我从 Redis 提供的 json 的样子: [ { "titel": "test 1",
Ejabberd 版本:19.9.0 在发送 OMEMO 消息时(使用 websockets),例如
我们有相当大的代码库(150 多个项目、400000 多行 Java 代码、一些 Groovy 和 Gradle 代码、一些 Perl 代码、一些 XML、大量 JSP 等)。我设法在 Spring
我在一个网站上工作,您可以在其中创建 svg 艺术品,这意味着您可以动态添加元素、缩放、颜色并移动它们。 问题是,当你开始在他们身上施加阴影时,一切都会开始变慢。对于这个的现场演示,this是我正在开
有没有办法分析 Vim 插件? 当我打开一个大的 .py 时,我的 MacVim 变得越来越慢。我知道我可以取消选择所有插件并逐一重新选择以检查哪个插件是罪魁祸首,但是有没有更快的方法? 我的 dot
我正在构建一个JavaFX应用程序。我知道它使用反射,并且反射可能不如我在代码中构建 UI 时那么快。 所以, 如何设计我的 Controller 以使由反射引起的开销尽可能小? 带/不带 @FXML
我对 UITableViewCell 进行了子类化显示从 1 到 70 的数字。 在每个单元格中,我都在检查中奖号码并检查他们的背景。问题是,经过几次滚动后,tableview 变得非常缓慢,甚至无法
如果我想group_by 和filter 那些在数据集中有任何NA 或factor 值的,我想在 dplyr 中使用 any 函数,但发现它对 NAs 或 factor 运行缓慢(但不是为了寻找任何数
我有一个问题。在我的解决方案中,我需要将数千个数据插入数据库。我正在使用批处理准备语句在一个请求中插入多行。在我调用插入几次之后, hibernate 变得更慢了。 我猜它会在我提交后检查数据库是否有
我从 json url 获取数据,但是当我想加载图像时,速度非常慢! class NewsTableViewController: UITableViewController { var id
我有一个相当简单的托管 Realm 对象 RealmAlertItem由一些字符串和 float 组成。我有一个函数 showAlertNotification()随后被调用(从网络外部触发)并且它依
请参阅下面的表格结构。 CREATE TABLE `oarc` ( `ID` bigint(20) NOT NULL AUTO_INCREMENT, `zID` int(11) NOT N
IntelliJ 慢得像爬行。键之间没有 1-2 个延迟几乎无法打字。我已经更新了堆大小。我在我的 Macbook Pro 上运行大约 2GB RAM。自从它一直在放缓。我已经增加了堆大小,但无济于事
我的 Web 应用程序遇到了性能问题。发现瓶颈是db。应用程序在具有 4 个 CPU 和 2GB RAM 的 LAMP 服务器 (VPS) 上运行。 将新记录插入数据库(包含大约 100.000 条记
我有关于自定义 DispatchQueue 的问题。 我创建了一个队列,并将其用作captureOutput:方法的队列。这是一个代码片段: //At the file header private
我是一名移动 QA。现在我们有一个关于网络响应和 UI 渲染之间的竞争条件的问题。我们猜测如果 UI 渲染比网络响应慢,那么它就会崩溃。 我们已经尝试通过使用 Charles 的本地 map 功能来加
我在 firefox 中遇到了一些奇怪的行为,我正在构建一个单页作品集,作为一名平面设计师,编码一直很困难。我想平滑地控制导航,然后向所有元素添加缩放(最初设计为 1920x1080 全屏)。讲师扔了
我是一名优秀的程序员,十分优秀!