我使用openai健身房的Acrobot-v1制作模型 观察状态大小为6,作用为-1或1或0。 我想检查我的模型是否能够学习。
因此,我使用了交叉验证方法,将我的集合分为64000个状态-动作对训练集和16000个状态-动作对验证集。
但是,每当我增加隐藏层中神经元的数量时,验证损失就会在训练过程中不断减少。 我了解到许多参数使过拟合,并且可以通过观察验证损失的增加来检测出过拟合。 我不知道该怎么办。
self.DEncoder = tf.keras.models.Sequential([
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(self.nInHidden),
tf.keras.layers.BatchNormalization(),
tf.keras.layers.LeakyReLU(),
tf.keras.layers.Dense(self.nInHidden),
tf.keras.layers.BatchNormalization(),
tf.keras.layers.LeakyReLU(),
tf.keras.layers.Dense(self.nInHidden),
tf.keras.layers.BatchNormalization(),
tf.keras.layers.LeakyReLU(),
tf.keras.layers.Dense(self.nInHidden),
tf.keras.layers.BatchNormalization(),
tf.keras.layers.LeakyReLU(),
tf.keras.layers.Dense(self.nfeature),
tf.keras.layers.BatchNormalization(),
tf.keras.layers.LeakyReLU()
])
self.DDecoder = tf.keras.models.Sequential([
tf.keras.layers.Dense(self.nInHidden),
tf.keras.layers.BatchNormalization(),
tf.keras.layers.LeakyReLU(),
tf.keras.layers.Dense(self.nInHidden),
tf.keras.layers.BatchNormalization(),
tf.keras.layers.LeakyReLU(),
tf.keras.layers.Dense(self.nInHidden),
tf.keras.layers.BatchNormalization(),
tf.keras.layers.LeakyReLU(),
tf.keras.layers.Dense(self.nInHidden),
tf.keras.layers.BatchNormalization(),
tf.keras.layers.LeakyReLU(),
tf.keras.layers.Dense(self.nState*self.npred),
tf.keras.layers.Reshape((self.npred,self.nState,1))
])
这是我的模特。我用过l2损失(毫秒,均方误差)。
答案 0 :(得分:0)
不清楚您要问什么,主要是因为您从不不希望模型过拟合。
当验证损失增加而训练损失持续减小时,就会发生过度拟合,这意味着您的模型仅适用于训练集数据,而不适用于其余数据如预期。如果您的验证损失持续减少,那么您的模型可能只需要更多的训练时间就可以达到最佳性能。
也将Train set的一部分作为验证集分开称为 Hold-out Validation ,而不是Cross-Validation。