【发布时间】:2018-01-29 11:21:00
【问题描述】:
我正在编写一些代码来优化神经网络架构,因此有一个 python 函数create_nn(parms) 可以创建和初始化一个 keras 模型。
但是,我遇到的问题是,在较少的迭代之后,模型的训练时间比平时要长得多(最初一个时期需要 10 秒,然后在大约第 14 个模型之后(每个模型训练 20 个时期)需要 60 秒/时代)。
我知道这不是因为不断发展的架构,因为如果我重新启动脚本并开始它是否结束,它就会恢复正常速度。
我正在跑步
from keras import backend as K
然后是一个
K.clear_session()
在训练任何给定的新模型之后。
一些额外的细节:
对于前 12 个模型,每个 epoch 的训练时间大致保持在 10 秒/epoch。然后在第 13 个模型每个 epoch 的训练时间稳步攀升至 60 秒。然后每个 epoch 的训练时间徘徊在 60 秒/epoch 左右。
我正在以 Tensorflow 作为后端运行 keras
我正在使用 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。
我该如何解决这个问题?
【问题讨论】:
-
需要更多信息来回答这个问题,如果您使用自定义函数来构建模型,那么您应该检查您的代码并确保您没有创建模型副本或无意中每次构建新层时添加一堆层。
-
@Dimesio 感谢您的评论。我已经用有关
create_nn函数的更多详细信息更新了这个问题。调用K.clear_session()时不会清除图层等,还是我弄错了K.clear_session()的作用? -
@E.O.我不太确定
K.clear_session()做了什么,但由于您使用的是 TensorFlow,也许您还需要使用tf.reset_default_graph()重置底层图形? -
我有一个类似的问题 - 你找到解决办法了吗?
-
如果您编写了自己的数据加载器,问题可能就在那里。我曾经在自定义数据加载器中遇到过一个错误,它不断返回越来越大的批次,因此运行时间越来越长。
标签: python tensorflow keras