MQL5算法交易的神经网络-007卷积神经网络
与全连接的感知器相比,卷积网络有两种新型层:卷积(滤波器)和池化(子采样)。指定的层旨在突出主要组件并过滤掉原始数据中的噪声,同时降低数据的维度(体积),然后将其馈送到全连接的感知器中进行决策。根据要解决的任务,可以一致地使用几组交替的卷积层和子采样层。
卷积层负责识别源数据集中的对象。在这一层中,使用一个过滤器对原始数据进行数学卷积的顺序操作,充当卷积核。
池化层CNeuronProof
初始化,不需要激活函数,权重和优化器等内容。
前向传播,如果采用最大池化,使用 array.Max(1)
计算每行的最大值,并将其保存到 m_cOutputs
中;如果采用平均池化,使用 array.Mean(1)
计算每行的平均值,并将其保存到 m_cOutputs
中。
计算隐藏层梯度,如果采用最大池化,遍历窗口中的每个元素,如果元素值等于输出值 out
,则将梯度 gradient
加到 inputs_grad
中;如果采用平均池化,将梯度 gradient
除以窗口大小 m_iWindow
,然后遍历窗口中的每个元素,将梯度加到 inputs_grad
中。
保存/加载池化层的参数和缓冲区。
卷积层CNeuronConv
初始化
- 参数检查: 确保传入的描述信息有效。
- 保存常量: 将卷积层的参数保存到类的成员变量中。
- 保存优化方法和结果张量转置标志: 将优化方法和结果张量转置标志保存到类的成员变量中。
- 初始化结果缓冲区: 创建并初始化结果缓冲区。
- 初始化误差梯度缓冲区: 创建并初始化误差梯度缓冲区。
- 根据转置标志初始化缓冲区: 根据转置标志初始化结果缓冲区和误差梯度缓冲区。
- 初始化激活函数类: 设置激活函数及其参数。
- 初始化权重矩阵缓冲区: 创建并初始化权重矩阵缓冲区,并生成权重。
- 初始化权重梯度缓冲区: 创建并初始化权重梯度缓冲区。
- 初始化动量缓冲区: 根据优化方法初始化动量缓冲区。
前向传播
- 创建矩阵并填充输入数据。
- 添加偏置列。
- 计算加权和,并将结果存储到输出缓冲区中。
计算隐藏层的梯度
获取梯度矩阵并根据转置标志调整其大小。
计算加权和,并根据窗口大小和步长调整输入梯度。
计算权重的误差梯度
- 创建矩阵并填充输入数据。
- 添加偏置列。
- 计算加权和,并将结果加到权重增量矩阵中。
验证卷积神经网络
创建模型:创建输入层,创建卷积层,创建池化层,创建隐藏层,创建输出层
生成随机初始数据
执行前向传播和反向传播
获取梯度和权重
比较分析梯度和经验梯度