大家好, 欢迎学习本Python教程｡
好了, 我们已经用网络类的init函数构建了神经网络的架构, 现在我们要创建第二个函数,
也就是forward函数｡
这就是激活神经元的功能｡
也就是说, 它是将执行正向传播的函数｡
所以我们开始吧｡
让我们把这个函数, 向前调用, 就像我们刚才说的.
这个函数有两个参数｡
首先是self, 像往常一样, 你知道, 能够使用对象的变量, 因为我们将使用FC
1和FC 2｡
所以我们需要自我｡
能够使用这些变量｡
然后我们需要第二个参数, 也就是我们的输入, 我们称之为状态,
因为状态就是我们神经网络的输入｡
这些状态是进入神经网络的输入｡
然后作为输出, 我们将有三个可能的动作向左, 直行或向右的提示值｡
但是我们不需要在这里输入它作为参数因为这正是我们想要返回的｡
所以这个正向函数不仅会激活神经元, 而且主要会根据这里的输入状态,
返回每个可能动作的提示值｡
这就是我们需要的两个论据｡
现在让我们进入函数内部, 指定我们想要它做什么｡
好吧, 我会的
所以我们要做的第一件事就是激活隐藏的神经元我们用变量X来命名隐藏的神经元｡
所以X代表隐藏的神经元｡
那么我们要如何激活它们呢？
当然, 我们要用输入神经元｡
我们将使用第一个全连接FC 1来得到隐藏的神经元, 然后我们将对它们应用一个激活函数,
这将是整流函数｡
那我们要怎么做呢？
还记得我们导入了包含PyTorch中所有函数的torch dot net
dot函数模块来实现神经网络吗？我们给了它一个快捷方式｡
所以我们现在要做的就是, 使用函数模块中的一个函数,
这个函数是真实的.
那么什么是价值呢？
价值就是你们在直觉课上看到的矫正函数｡
这只是整流器功能的名称｡
但是因为这个函数是从一个函数中取出来的, 这个函数的快捷方式是f, 我们需要在这里输入第一个f点,
然后我们就可以在那里取这个函数｡
实际上如果我输入re, 我们就有了值函数｡
这就是整流器的功能, 它会激活隐藏的神经元, 也就是X.
在这个价值函数中, 我们完全理解了我们需要输入什么.
这是我们想要激活的神经元, 也就是隐藏的神经元｡
为了得到这些隐藏的神经元, 我们将进行第一次完整的连接｡
我们将把它应用到输入神经元上, 从输入神经元到隐藏神经元｡
让我们来看看第一个完整的连接｡
但是我们的第一个全连接是对象的变量｡
因此, 我们需要在这里输入第一个self. FC, 现在开始｡
这是我们神经网络的第一次完整连接｡
在第一个连接中, 我们要输入我们的输入状态, 从输入神经元到隐藏神经元｡
既然我们给它起了state这个名字, 那么我们必须在这里输入state, 这样就可以了｡
我们现在得到了激活的隐藏神经元｡
好吧, 我会的
现在我们有了隐藏的神经元, 我们将返回输出神经元｡
下一行, 正如你们所理解的, 输出神经元对应于我们的动作｡
但这些都不是直接的行动｡
这些是Q值, 因为我们正在构建一个深度学习模型, 它结合了一个深度学习模型来保持学习｡
因此我们在这里使用关键学习来得到我们每个动作的Q值｡
然后使用软最大值或ARG最大值, 我们将得到最终的操作｡
所以这里我将要引入的变量对应于输出神经元｡
由于输出神经元是Q值, 我将把这个变量称为Q值｡
我们走吧｡
因此, 提示值, 现在我们直接取全连接, 也就是变量｡
FC, 2, 但是我们的对象的一个变量.
所以我们在这里自我取｡
当然, 这里我们输入的是连接左侧的神经元｡
这是我们从第一行得到的, 也就是x｡
所以X, 我们开始吧｡
现在我们得到Q值｡
这是我们神经网络的输出神经元｡
然后是最后一行代码
当然, 第四个函数是用来返回这些Q值的, 所以我们只需要添加一个return和简单的Q｡
值和, 这将为每个可能的操作返回Q值｡
向左走, 直走或向右走｡
好吧, 恭喜你｡
我们的第一节课结束了｡
实际上, 我们已经完成了神经网络的架构｡
记住, 这不是一个完成的工作｡
通过尝试不同的体系结构, 您始终可以改进神经网络的体系结构｡
所以你可以在这里增加更多的神经元｡
例如, 如果你想增加50个隐藏的神经元, 你可以用50,
50和50来代替这里的30和这里的30｡
然后你可以通过建立一些新的完整连接来添加更多的隐藏层｡
这才是艺术家的工作
对于每种情况下的最佳体系结构, 没有通用的规则｡
这就是为什么我们要做实验｡
但我们已经试过了｡
你会看到我们最终会得到一辆相当不错的自动驾驶汽车｡
好吧, 我会的
现在我们要开始下一节课, 关于体验回放.
我们将在接下来的三个教程中介绍｡
在那之前, 好好享受吧｡
一､