这段代码是用于更新 GAN 中鉴别器(discriminator)的参数。它接受三个参数:hiddenLayerUpdations 表示隐藏层的更新,outputLayerUpdation 表示输出层的更新,learning_rate 表示学习率。该函数使用了线性代数(LinAlg)库来进行计算。

首先,它更新了输出层的权重和偏差。权重的更新是通过减去输出层的更新实现的,而偏差的更新是通过减去输出层误差的平均值乘以学习率来实现的。

其次,如果网络不为空,它将更新所有隐藏层的权重和偏差。具体来说,它遍历所有隐藏层,并使用该层的更新来更新该层的权重和偏差。权重的更新是通过减去该层的更新实现的,而偏差的更新是通过减去该层误差的平均值乘以学习率来实现的。

代码片段:

void GAN::updateDiscriminatorParameters(std::vector<std::vector<std::vector<double>>> hiddenLayerUpdations, std::vector<double> outputLayerUpdation, double learning_rate){
        LinAlg alg;

        outputLayer->weights = alg.subtraction(outputLayer->weights, outputLayerUpdation);
        outputLayer->bias -= learning_rate * alg.sum_elements(outputLayer->delta) / n;

        if(!network.empty()){
            network[network.size() - 1].weights = alg.subtraction(network[network.size() - 1].weights, hiddenLayerUpdations[0]);
            network[network.size() - 1].bias = alg.subtractMatrixRows(network[network.size() - 1].bias, alg.scalarMultiply(learning_rate/n, network[network.size() - 1].delta));

            for(int i = network.size() - 2; i > network.size()/2; i--){
                network[i].weights = alg.subtraction(network[i].weights, hiddenLayerUpdations[(network.size() - 2) - i + 1]);
                network[i].bias = alg.subtractMatrixRows(network[i].bias, alg.scalarMultiply(learning_rate/n, network[i].delta));
            }
        }
    }
GAN 鉴别器参数更新函数 - C++ 代码解析

原文地址: https://www.cveoy.top/t/topic/n2nW 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录