google deepMind DQN 源码解读(1)

本文是google DQN源码的初步解读,从train_agent.lua开始,深入initenv.lua,讲解了torch库的使用,包括nnutils.lua中的函数,特别是网络权重归一化。接着分析NeuralQLearner.lua中的网络构造,特别是convnet_atari3.lua中的卷积网络定义。最后提到了TransitionTable.lua在DQN中的作用。
摘要由CSDN通过智能技术生成

google DQN 源码解读(1)

首先train_agent.lua文件进入,执行第一行代码:

if not dqn then
    require "initenv"
end

由于没有dqn这个变量,之后会跳转initenv.lua文件,对环境进行配置

进入这个文件之后,瞬间可以得到一个table: dqn = {}
之后require一些文件,其中torch,nn,nngraph是torch自带文件,分别是
1. torch的数据结构以及一些常用函数
2. 网络模块
3. 网络显示模块

然后你可以看到代码: require 'nnutils'
此后,自然进入nnutils.lua文件


文件源码如下:
2016-06-07-164116_599x418_scrot.png-37.8kB
2016-06-07-164123_423x64_scrot.png-5.3kB
2016-06-07-164132_376x58_scrot.png-5.6kB
2016-06-07-164140_639x258_scrot.png-40.4kB

主要是这5个函数:递归映射, 绝对值平均, 最大的绝对值, 得到weight的归一化值,以及得到梯度的归一化值


解读这个文件的代码,应该从最后两个函数开始,注意这两个函数是一样的,所以就以get_weight_norms(module)作为范例
首先看注释: 在给定的网络中,构建一个平均绝对权重值的字符串给所要使用的模块
也就是说这个函数是用来得到一个字符串的,这个字符串表达的内容是平均权重值,那么,他是如何实现的呢,注意到代码都是调用了函数recursive_map,并且将一个函数对象作为参数传入了该函数,因此我们要回到recursive_map来理解这里是如何实现的


第一行代码是定义了一个空字符串

之后判断传入的模块里面有没有field或者moudle.moudules这两个对象,注意对于get_weight_norms这个函数调用来说,就是判断有没有moudle[‘weight’]或者module.modules,

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值