社区讨论

这种做法能上题解吗

P1001A+B Problem参与者 3已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@mhjszi58
此快照首次捕获于
2025/11/04 08:00
4 个月前
此快照最后确认于
2025/11/04 08:00
4 个月前
查看原帖
机器学习训练后编入代码中
CPP
#include <iostream>
#include <vector>
#include <cmath>    
#include <iomanip>  


const double INPUT_SCALE = 1.0e+09;
const double OUTPUT_SCALE = 2.0e+09;


const int INPUT_SIZE = 2;
const int HIDDEN_NEURONS = 4;
const int OUTPUT_SIZE = 1;


double W_h[HIDDEN_NEURONS][INPUT_SIZE] = {
    {-1.767773468946937446e-02, -7.793268792037753856e-02},
    {4.668311065397106052e-01, 5.210749660791885729e-01},
    {-1.919635612596087004e-01, -1.793967120896731160e-01},
    {3.403902268165061584e-01, 2.396881132551242632e-01},
};

double b_h[HIDDEN_NEURONS] = {
    1.786500176221633972e-06,
    -3.299220219965260260e-03,
    1.042906958960767476e-03,
    -2.534605147607068600e-03
};


double W_o[OUTPUT_SIZE][HIDDEN_NEURONS] = {
    {-7.701013140847089156e-02, 6.819291288309156096e-01, -2.647350405669287587e-01, 3.803676314921620172e-01},
};

double b_o[OUTPUT_SIZE] = {
    3.490147721887215670e-03
};

double predict(double network_input_a_scaled, double network_input_b_scaled) {
    double inputs_scaled[INPUT_SIZE] = {network_input_a_scaled, network_input_b_scaled};
    double hidden_layer_output[HIDDEN_NEURONS];

    for (int i = 0; i < HIDDEN_NEURONS; ++i) {
        double weighted_sum = 0;
        for (int j = 0; j < INPUT_SIZE; ++j) {
            weighted_sum += W_h[i][j] * inputs_scaled[j];
        }
        weighted_sum += b_h[i];
        hidden_layer_output[i] = weighted_sum;
    }

    double output_layer_value_scaled[OUTPUT_SIZE];

    for (int i = 0; i < OUTPUT_SIZE; ++i) {
        double weighted_sum = 0;
        for (int j = 0; j < HIDDEN_NEURONS; ++j) {
            weighted_sum += W_o[i][j] * hidden_layer_output[j];
        }
        weighted_sum += b_o[i];
        output_layer_value_scaled[i] = weighted_sum; 
    }

    return output_layer_value_scaled[0]; 
}

int main() {
    std::ios_base::sync_with_stdio(false);
    std::cin.tie(NULL);

    long long input_a_orig, input_b_orig;

    if (!(std::cin >> input_a_orig >> input_b_orig)) {
        return 1; 
    }

    double model_input_a_scaled = static_cast<double>(input_a_orig) / INPUT_SCALE;
    double model_input_b_scaled = static_cast<double>(input_b_orig) / INPUT_SCALE;

    double prediction_scaled = predict(model_input_a_scaled, model_input_b_scaled);

    double prediction_reconstructed = prediction_scaled * OUTPUT_SCALE;

    long long result = static_cast<long long>(std::round(prediction_reconstructed));

    std::cout << result << std::endl;

    return 0;
} 

回复

3 条回复,欢迎继续交流。

正在加载回复...