我正在编写一些代码来优化神经网络架构,因此有一个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 .

我该如何解决这个问题?