【发布时间】:2020-04-19 14:11:09
【问题描述】:
我正在尝试在时间序列数据集上训练 LSTM NN,该数据集包含超过一千个不同的设备,并通过每日观察来预测设备何时会出现故障。我已经适当地处理了我的数据清理和设置,并且可以成功地在数据上训练一个神经网络。
现在,我想对 NN 进行多次训练迭代,每次迭代都使用不同的超参数,以便为数据找到最佳的训练参数集。在这样做时,我遇到了一个非常奇怪的错误。当我训练 NN 的迭代时,我能够通过 正好 13 个 NN,然后我的程序被杀死。在终端中运行时,我只会收到一条消息,上面写着 Killed,而在控制台(Pycharm)中运行时,我会收到一条 process completed with exit code 1 消息。我不认为问题出在内存不足,因为我在控制台中运行时保持堆大小监视器处于开启状态,并且我没有接近最大值。考虑到我随机选择超参数(所以我每次运行程序时都不会运行相同的 13 个 NN),我每次运行第 13 次都会失败似乎也不仅仅是巧合。
有人对我可以从哪里开始解决此问题有任何建议吗?
谢谢。
函数 I 循环训练后续 NN:
lrate = round(10 ** (-4 * random.uniform(0, 1)), 3) # 10e-4 to 10
decay_rate = round(10 ** (-4 * random.uniform(0, 1)), 3)
epochs_ = random.randint(25, 250)
batches = random.randint(8, 64)
l2_rate = round(10 ** (-4 * random.uniform(0, 1)), 3)
dropout_rate = round(random.uniform(0.1, 0.5), 3)
record_params = {'hidden_layers': hidden_layers, 'lrate': lrate, 'decay_rate': decay_rate, 'epochs': epochs_,
'batches': batches, 'l2_rate': l2_rate, 'dropout_rate': dropout_rate}
model = Sequential()
model_input_shape = X_train_input.shape[1:]
model.add(LSTM(hidden_layers, input_shape=model_input_shape, return_sequences=True,
kernel_regularizer=regularizers.l2(l2_rate),
activation=activation_func)) # return_sequences=True,
model.add(Dropout(dropout_rate))
model.add(BatchNormalization())
model.add(LSTM(hidden_layers, kernel_regularizer=regularizers.l2(l2_rate),
activation=activation_func)) # return_sequences=True,
model.add(Dropout(dropout_rate))
model.add(BatchNormalization())
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer=optimizers.Adam(lr=lrate, decay=decay_rate),
metrics=[metrics.AUC(), metrics.FalseNegatives(), metrics.FalsePositives()])
model.fit(X_train_input, y_train_input2, batch_size=batches, epochs=epochs_,
validation_data=(X_val_input, y_val_input2), verbose=1,
shuffle=False, callbacks=[EarlyStopping(monitor='val_loss', patience=15)]
)
# test
yhat = model.predict(X_train_input, batch_size=batches)
yhat_val = model.predict(X_val_input, batch_size=batches)
# record
record_params['train_roc'] = round(roc_auc_score(y_train_input2, yhat.reshape(yhat.shape[0])), 3)
record_params['val_roc'] = round(roc_auc_score(y_val_input2, yhat_val.reshape(yhat_val.shape[0]),
average='weighted'), 3)
return pd.DataFrame(record_params, index=[ind]) ```
[Does not seem like a memory issue - this screenshotted during 5th NN run. ][1]
[1]: https://i.stack.imgur.com/Rb9GL.png
【问题讨论】:
标签: python tensorflow memory keras pycharm