我正在编写一些代码来优化神经网络架构,因此有一个python函数 create_nn(parms)
,用于创建和初始化keras模型 . 然而,我遇到的问题是,经过较少的迭代后,模型比平时需要更长的训练时间(最初一个时期需要10秒,然后在大约第14个模型之后(每个模型训练20个时期)需要60秒/时代) . 我知道这不是因为不断发展的体系结构,因为如果我重新启动脚本并开始它结束,它将恢复正常速度 .
我现在正在跑步
from keras import backend as K
然后一个
K.clear_session()
在训练任何给定的新模型之后 .
Some additional details:
-
对于前12个型号,每个时期的训练时间大致保持在10秒/纪元 . 然后在第13个模型训练时间每个时期稳步上升到60秒 . 然后每个纪元的训练时间在大约60秒/纪元上徘徊 .
-
我正在使用Tensorflow作为后端运行keras
-
我正在使用Amazon EC2 t2.xlarge实例
-
有足够的可用内存(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 .
我该如何解决这个问题?