大家好, 欢迎学习本教程｡
在今天的教程中, 我们将使用共享模型进行同步｡
所以我们要做的仍然是同样的函数, 然后初始化一集的长度｡
所以我们把一个情节的长度叫做, 下划线长度｡
我们走吧｡
我们要把它初始化为零｡
但随后这一集的长度将增加｡
说到递增, 这正是我们要做的｡
所以我们要用while循环, 用这个技巧来表示while为真｡
卡伦重复接下来要发生的事情, 在这个循环中会发生什么｡
在这个井循环中, 首先要做的是实现一个事件的长度｡
所以我们要做的第一件事就是把它加1｡
要做到这一点, 我们可以简单地把一集的长度和｡
这里加一等于一｡
现在, 我们将与共享模型同步｡
这意味着现在代理将使用共享模型在一定数量的步骤上进行它的小探索｡
模型如何获得共享模型？
我们需要取我们的模型, 然后用点, 然后用load state
dict方法, 因为我们要用它来获取共享模型的状态字典｡
因此, 我们必须首先放置共享模型, 然后应用静态方法来获取该共享模型的参数｡
这就是我们的模型将如何让共享模型进行它的小探索｡
一旦模型得到了这个共享模型, 现在我们要区分两种情况｡
第一个是if done, 意思是游戏是否结束｡
如果博弈结束了, 会发生什么呢？
我们必须重新初始化lshtm和模型的隐藏状态和单元状态｡
这就是为什么现在我要取C, X, 单元状态, 还有h, x, 隐藏状态,
我将重新初始化它们｡
以及如何用0重新初始化它们｡
将存在256个零的向量, 因为记住lshtm的输出具有维度1和256｡
好了, 我们走吧｡
我们将使用torch库初始化它们｡
然后零点起作用｡
因为我们需要一个256个零的向量, 我们在这里输入两个维度, 一个是向量,
256个是零的元素数｡
好了
但是我们会把它转换成一个火炬变量, 因为这样会计算一些梯度｡
所以我们需要把这个和梯度积分｡
好吧, 我会的
下面的隐藏状态也是一样的, 我们用同样的方法初始化它们｡
我们走吧｡
如果游戏结束的话｡
现在我们可以用ls来访问的另一个案例是在那个案例中发生的事情｡
我们将保留旧的单元格状态和隐藏状态, 我们可以很容易地通过输入来保留旧的状态｡
请参阅x等于变量c x数据, 对于隐藏状态也是如此｡
我们可以简单地把这里的hx等于变量hx加到数据中｡
好吧, 我会的
这是好事
好了, 好了
现在我们可以退出LS了因为不管博弈结束与否我们基本上都已经完成了这两种情况.
但我们仍然处于疯狂的循环中, 因为现在我们要做更多的事情, 基本上都是训练过程｡
所以我们现在要做的是初始化几个变量, 这些变量将是训练中计算的核心｡
所以我们开始吧｡
我们需要的价值观, 是评论家的输出｡
这就是V函数, 我们用这种方法把它们初始化为一个空列表.
然后我们需要对数概率｡
因此, 记录probs, 我们也将它初始化为一个空列表｡
当然我们也需要初始化为空列表的奖励｡
最后, 我们需要熵是一个新的东西, 但这确实是训练计算的核心｡
所以空名单也一样｡
现在我们已经初始化了这四个变量, 我们可以开始一个新的for循环｡
在这个新的for循环中, 我们将更新这四个变量的值｡
所以这个新的for循环将是一个完整的循环, 遍历所有的步骤, 循环变量就是我们的步骤.
因此对于step in range和inside我们可以直接输入params. num steps因为参数num
steps就是探索的步数｡
那么对于探索中的所有步骤, 我们该怎么做呢？
我们将得到模型的预测值, 你知道, 模型返回的值｡
为了得到这些预测, 我们可以简单地把模型应用到输入中｡
这就是输入信号｡
它会通过模型中的大脑, 得到输出, 但它会得到几个输出｡
它会得到V函数的值, 这是评论家的输出, 然后是Q值, Q分析,
这是演员的输出｡
但也不要忘记, 它还将输出隐藏状态和单元状态的元组｡
因为记住, 如果我们回到我们的模型,
在正向函数中, 我们可以看到, 它确实返回了评论家的输出, 也就是v函数的值,
然后是参与者的输出, 也就是Q值, 还有lshtm的输出, 也就是这个双十六进制, 可以看到隐藏状态和细胞状态｡
所以我们必须小心｡
这与之前发生的情况有很大不同, 因此, 我们现在要将模型应用于输入,
即状态｡
但现在有几件事要做, 这与酷刑有关, 但这当然给了我们正在做的事情力量｡
我们要做的第一件事就是挤压｡
要添加索引必须为零的伪维度的State｡
这是因为模型只能接受一批输入, 而不能接受向量或张量本身的输入｡
所以这是我们必须做的第一件事｡
但是, 要将输入状态转换为torch变量, 这还不是全部｡
所以我在这里加上变量｡
所以现在我们对状态, 输入状态没问题了｡
但请记住, 这四个函数的输入实际上是输入图像｡
这就是我们刚才讲的, 也是隐藏态和细胞态的主要内容｡
因此, 我们需要在这里加上第二部分的输入, 其中有一对H, x和c, x｡
好吧, 我会的
我们必须把我们去的括号｡
我们有两个输入｡
第一个是输入状态｡
也就是说, 输入图像全部转换为火炬变量, 并进行压缩,
以添加批次的模糊维度以及隐藏状态和单元状态的元组｡
所以我们都准备好了｡
我们已经准备好进行预测了｡
现在, 因为这个返回, 我们的三个预测, 评论家的输出,
参与者的输出, 隐藏状态的元组, 以及LCM的单元状态｡
我们现在要引入三个新变量, 这三个变量就是输出｡
好了, 我们走吧｡
第一个输出是V函数的值, 它是评论器的输出｡
所以我们称之为价值｡
好了, 我们走吧｡
这是第一个输出｡
然后第二个输出是参与者的输出, 这就是Q值｡
但是, 由于Q值与动作相关联, 我们也可以将其称为动作值｡
好吧, 我会的
然后由模型返回最终输出｡
这是隐藏态的顶部, hx和单元态｡
看到X, 我们走｡
我们有三个由模型返回的输出｡
好极了｡
现在我们已经有了预测, 我们需要使用软最大值来进行正确的操作｡
所以现在这将和我们之前做的完全一样｡
下一步是求出概率, 我们称之为prob.｡
这就是我们使用软最大值方法的地方, 我们从有捷径的函数模块中得到｡
所以, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,
这就是Q值, 也就是模型中参与者的输出｡
好吧, 我会的
现在我们有了概率, 但是你们注意到了,
我们要用熵来计算熵, 为了得到熵, 我们不仅需要概率, 还需要对数概率, 因为熵是乘积的和｡
对数概率乘以所有这些乘以-1
所以我们还需要得到log prob, 它同样是从log soft max中生成的｡
所以我们不求概率的分布, 而是求对数概率的分布, 我们用log来计算.
塞脖子, 最大的锁功能相同｡
我们应用于cue值｡
我们称之为动作值｡
好吧, 我会的
现在我们有了探针和探针, 我们就可以得到熵和熵了｡
这个公式是什么？
正如我刚才提到的, 我们取对数, 乘以探测器, 然后我们要取所有这些的和｡
要做到这一点, 我们可以把这个和加起来｡
一个｡
实际上, 我们现在已经多次使用这个技巧了｡
就像我们说的, 我们把这些乘以-1｡
所以它是log prob乘以prob perfect的乘积之和的负数｡
现在我们要把这个刚刚计算出来的熵, 存储在熵的列表中｡
因为我们开始了｡
最后一次计算熵｡
所以我们需要把它存储在熵列表中｡
要做到这一点, 再简单不过了, 我们要用append函数, 当然,
因为熵是一个列表｡
所以我们取熵列表, 然后点, 我们用append函数把刚刚计算的熵加起来｡
好吧, 我会的
所以我们现在要休息一下｡
我们要一步一步来
在下一个教程中, 我们将通过随机抽取生成的概率分布来玩这个游戏｡
而在我们玩完这个动作之后, 我们将得到这个状态的值,
我们将最终存储我们的新传输状态的奖励并这样做｡
这将是一个新的一大步, 我们将在下一个教程中完成｡
在那之前, 好好享受吧｡
一､