大家好, 欢迎学习本Python教程｡
现在, 我们已经准备好训练网络, 使输出和目标之间的平方距离最小化,
这要归功于我们在上一节中对资格跟踪所做的工作,
基本上, 我们已经准备好通过获取输入､
目标和预测来开始整个训练, 然后计算预测和目标之间的最后一个误差｡ 然后用随机梯度下降法进行反向传播来更新权值｡
我们已经准备好了, 但是因为我们要计算100步的移动平均值, 为了跟踪训练中的平均值,
在我们进行整个训练之前,
我们要创建一个类, 来计算100步的移动平均值｡
所以不用担心｡
我们会尽快的｡
我们将创建一个包含三个函数的类, 但我们将在本教程中完成所有这些操作｡
所以我们会尽快完成｡
我们已经做过了｡
除此之外, 我们现在要专注于训练, 因为这是最重要的｡
所以让我们在这一个教程中马上开始这门课｡
好吧, 我会的
所以我们要引入一个新的类, 我们称之为四移动平均线.
现在我们开始第一个函数｡
当然, 这是初始化函数, 它永远不会改变｡
这个init函数有两个参数｡
第一个是self, 代表移动平均未来对象和大小, 它对应于我们要计算平均值的奖励列表的大小.
所以这将是100｡
好吧, 我会的
我们有了init函数的参数, 现在我们来看看函数内部.
现在你知道该怎么做了｡
我们必须初始化特定于对象的变量｡
这些是第一个, 第一个是奖励列表.
这是一个包含100个奖励的列表, 我们要计算它们的平均值.
所以现在, 我们只是简单地用这个空列表初始化这个列表｡
所以悬赏榜｡
当然, 未来对象的第二个变量是大小,
大小等于我们在创建未来移动平均对象时输入的参数,
这里是大小, 我们已经准备好进入下一个函数, 即ADD函数, 它将增加累积奖励｡
小心不是简单的奖励, 而是累积的奖励｡
这是因为, 你知道, 我们正在做资格追踪, 因此每十步学习一次,
因此学习是累积的奖励, 而不是简单的奖励｡
所以我们要做的加法函数会把累积奖励加到奖励列表中.
def, 我们称之为ADD, 这个ADD函数有两个参数｡
第一个是self因为我们要用这个奖励列表因为我们要把累积奖励加到这个奖励列表上.
所以我们需要这个自我才能得到这个所以自我｡
第二个是奖励, 代表累积奖励.
好吧, 我会的
这就是ADD函数的两个参数｡
现在让我们进入函数内部, 定义它要做什么.
好吧, 我会的
所以很简单, 它要做的第一件事就是每当我们得到一个累积的奖励,
一个新的奖励, 你知道, 当我们在十个新的步骤上取得进展时, 我们要做的就是把这个累积的奖励加到列表上｡
这正是我们要做的｡
我们要写一行代码, 把这个新的累积奖励加到这个奖励列表上,
这个奖励是我们在完成十个步骤后得到的.
要做到这一点, 我们必须把两个条件分开, 因为我们要处理的是批次, 好吧,
奖励会在一些列表中, 但在其他一些情况下, 奖励也可以作为一个单一的元素｡
在列表中添加一个元素的语法, 也就是奖励列表, 无论你是添加一个列表还是一个元素,
都是不一样的｡
所以我们只需要建立一个条件来区分这两种情况｡
让我们从第一种情况开始, 也就是说我们在这个奖励列表上添加的是一个列表.
要做到这一点, 我们要添加一个实例, 在括号中输入两个参数｡
第一个是我们的奖励, 我们增加了奖励｡
第二个是列表｡
如果是这样的话, 奖励列表意味着如果奖励被列在一个列表中, 那么如果奖励被列在一个列表中,
我们所做的就是很简单的自我, 我们拿着我们的列表｡
奖励｡
我们要把这个列表相加因为这是一个列表, 我们可以用一个简单的加法运算, 因为我们可以把两个列表相加.
的奖励｡
这里是列表, 因为这将等于true｡
我是说, 如果我们在这个案子里｡
所以我们可以简单地把这个列表加到我们的奖励列表上, 所以我们可以简单地把奖励列表加上等于奖励｡
通过这样做, 我们只是通过把这两个列表加在一起来扩展列表｡
好吧, 我会的
第二个条件
所以我们可以简单地加上else｡
如果奖励不是一个列表, 而是一个单一元素的话.
那么, 在这种情况下会发生什么呢？
那是一样的
我们想把奖励添加到我们的奖励列表中, 但是我们不能使用这个语法, 因为奖励不再是一个列表｡
它将是单个元素｡
所以我们需要使用另一种语法, 就是append函数｡
当你想添加一个单一的元素到一个列表中, 你可以添加一些你必须使用的两个append函数｡
这正是我们现在要做的｡
我们要把对象的奖励列表粘贴到这里, 然后加上点附加｡
我们走吧｡
第一个, 当然是在括号中, 我们输入我们想要附加的元素｡
而这当然是奖励｡
但在这种情况下, 奖励将不会是一个列表｡
它将是一个单一的元素, 像一个单一的累积奖励, 而不是成一个列表｡
好吧, 我会的
然后我们想这样做, 但现在我们必须添加更多的东西｡
这就是当这个奖励列表得到超过100个元素时会发生的事情｡
这样的话, 我们要做的就是删除奖励列表中的第一个元素,
以确保奖励列表中包含的元素不超过100个.
所以就像我们在自动驾驶汽车上做的那样｡
为了确保这一点, 我们要增加一个条件, 规定当奖励列表的长度,
也就是奖励列表中元素的数量, 大于self时,
这个大小, 就是我们在这里设定的大小, 当我们创建这个对象时, 它将等于100｡
好吧, 只要这个奖励列表的元素数量大于100｡
我们要做的是删除奖励列表中的第一个元素, 它可以通过取索引零来获得｡
这是我们的奖励清单的第一个索引｡
这是我们的奖励列表的第一个元素, 当我们的奖励列表包含超过100个元素时, 我们希望删除它｡
所以在这个条件下, 我们要确保奖励列表中的元素不会超过100个.
因此, 现在我们可以做的是,
建立一个新的函数来计算我们的奖励列表的平均值, 它将包含100个元素, 因此我们将计算每次100步的移动平均值｡
让我们来创建这个新函数｡
这会很简单, 因为Python中有main函数, 它是NumPy中的一个函数,
用来计算列表的平均值.
让我们来介绍最后一个函数, 我们称之为average｡
这个函数会有一个自变量, 它是self, 因为我们会用到,
奖励列表, 它是对象的变量.
所以自我和冒号｡
现在让我们计算平均值, 我们直接返回平均值, 因为我们可以用均值函数来得到它,
当然我们要用到均值函数｡
我们要计算的是, 它的平均值就是我们的奖励列表.
我想我还是复制了它｡
是的, 我知道
我们走吧｡
所以我们只返回奖励列表的平均值｡
平均值, 就像我说的, 是一个非π的函数｡
所以这里我加上了快捷方式和p, 表示self的奖励列表｡
好了
我们有100步的平均值｡
好极了｡
所以我们非常有效率地上了这门课｡
现在我们得到了如何获得100步移动平均线的说明｡
既然我们在训练时要用到一个移动平均线对象, 那么, 我们先创建这个移动平均线对象｡
所以我们称它为A, 简单地说, 火星就是A类的一个对象｡
正如我们所说的, 我们希望大小为100, 因为我们希望计算100步的移动平均值｡
太完美了｡
我们走吧｡
我们现在已经准备好训练我们的人工智能, 使其最终成为智能｡
是时候了
正是从这一点出发, 我们的AI才会变得聪明｡
所以我等不及要训练它了｡
这将是相当容易的, 因为这是我们已经做了｡
但这会很有趣的｡
除此之外, 在那之后, 将是时间有更多的乐趣, 因为基本上我们的眼睛将完全准备好｡
它是内置的, 也是智能的,
因此我们将执行代码, 然后我们的人工智能将发挥厄运, 最终我们将观看我们的人工智能发挥厄运的视频, 我们将看到它是否设法达到背心｡
所以我等不及了｡
让我们开始训练吧｡
在那之前｡
还有我｡