kwc*_*kwc 5 python neural-network pandas deep-learning keras
我正在 Python 中使用 Keras 训练一个神经网络来处理时间序列气候数据(预测时间 t=T 时的值 X),并尝试在输入上添加一个 (20%) 的 dropout 层,这似乎限制了过度拟合并导致性能略有提高。然而,在我添加了一个新的且特别有用的功能(预测 t=0 时响应变量的值)后,我发现通过删除 dropout 层可以大幅提高性能。这对我来说很有意义,因为我可以想象神经网络如何“学习”该一个特征的重要性,并围绕调整该值进行其余的训练(即“这些其他特征如何影响在 t 时的响应”) =0 随时间 t=T 变化”)。
此外,我认为还有一些其他特征应该适用于所有时代。也就是说,我仍然希望 dropout 层能够提高模型性能——它只需要不丢弃某些特征,例如 t_0 处的 X:我需要一个仅丢弃某些特征的 dropout 层。
我已经搜索了这样做的示例,并阅读了 Keras 文档here,但似乎找不到一种方法来做到这一点。我可能会遗漏一些明显的东西,因为我仍然不熟悉如何手动编辑图层。任何帮助,将不胜感激。谢谢!
编辑:对于任何不明确之处表示歉意。这是我定义模型的代码(p 是特征数量):
def create_model(p):
model = Sequential()
model.add(Dropout(0.2, input_shape=(p,))) # % of features dropped
model.add(Dense(1000, input_dim=p, kernel_initializer='normal'
, activation='sigmoid'))
model.add(Dense(30, kernel_initializer='normal', activation='relu'))
model.add(Dense(1, kernel_initializer='normal',activation='linear'))
model.compile(loss=cost_fn, optimizer='adam')
return model
Run Code Online (Sandbox Code Playgroud)
我能想到的仅将 dropout 应用于特定特征的最佳方法是简单地将不同层中的特征分开。
为此,我建议您只需将输入分为基本功能和可删除功能:
from keras.layers import *
from keras.models import Model
def create_model(essentialP,droppableP):
essentialInput = Input((essentialP,))
droppableInput = Input((droppableP,))
dropped = Dropout(0.2)(droppableInput) # % of features dropped
completeInput = Concatenate()([essentialInput, dropped])
output = Dense(1000, kernel_initializer='normal', activation='sigmoid')(completeInput)
output = Dense(30, kernel_initializer='normal', activation='relu')(output)
output = Dense(1, kernel_initializer='normal',activation='linear')(output)
model = Model([essentialInput,droppableInput],output)
model.compile(loss=cost_fn, optimizer='adam')
return model
Run Code Online (Sandbox Code Playgroud)
使用两个输入训练模型。您必须在训练之前管理您的输入:
model.fit([essential_train_data,droppable_train_data], predictions, ...)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4484 次 |
最近记录: |