我正在使用Google的Dopamine框架来训练特定的强化学习用例。我正在使用自动编码器对Deep Q网络的卷积层进行预训练,然后在最终网络中传输这些经过预训练的权重。
为此,我创建了一个单独的模型(在本例中为自动编码器),我对其进行训练并保存所得到的模型和权重。
使用Keras的model sub-classing method创建DQN模型,并使用Sequential API
建立用于保存训练的卷积层权重的模型。我的问题是当尝试将预训练的权重加载到最终DQN模型中时。基于我使用Tensorflow's API中的load_model()
还是load_weights()
功能,我得到了网络的两种不同的总体行为,我想理解为什么。具体来说,我有以下两种情况:
load_weights()
方法将权重加载到最终模型中。权重是编码器的权重加上一个额外的层(在保存权重之前添加),以适应在加载多巴胺的地方实现的最终网络的体系结构。 load_model()
加载保存的模型,然后在__init__()
方法中定义新模型时,从加载的模型中提取相关层,然后将其用于最终模型。 总的来说,当我使用相同的预训练权重时,我希望这两种方法在每集获得的平均奖励方面会产生相似的结果。但是,这两种方法是不同的(1.尽管使用相同的预训练权重,其平均回报要高于2。),我不明白为什么。
此外,为了验证此行为,我尝试使用上述两种方法加载随机权重,以查看行为的变化。在这两种情况下,基于我使用的是上述两种加载方法中的哪一种,在加载训练后的砝码时,最终结果与我所关注的情况非常相似。似乎在每种情况下,预先训练的权重都不会对总体训练结果产生影响。虽然,这可能与我在此要研究的问题无关,因为可能是预先训练的体重没有提供整体上可能的任何好处。
任何对此的想法和想法将不胜感激。