使用 OpenNN 开发神经网络:尝试向回归神经网络添加层后程序崩溃

如何解决使用 OpenNN 开发神经网络:尝试向回归神经网络添加层后程序崩溃

我使用 OpenNN 为回归任务开发神经网络。我的神经网络层有问题。几周前我从 OpenNN 的 master 分支克隆。每次我尝试添加图层时,我的程序都会崩溃而不会给出错误消息。我目前正在为回归问题实施神经网络,因此我查看了 OpenNN 的 yacht_hydrodynamics_design 示例。但是在将这段代码复制到我的代码中后,我遇到了这个问题。到目前为止,我尝试添加一个 Scaling 层和一个 Upscaling 层,但这些都不起作用。到目前为止,这是我的代码:

bool NNetwork::preparationForTraining(const string& filedata) {
int inputLayerSize = 5;
int outputLayerSize = 1;
int hiddenLayerSize = round(sqrt((inputLayerSize * inputLayerSize) + (outputLayerSize * outputLayerSize)));
int layers = 3;
try {
    Tensor<Index,1> neural_network_architecture(layers);
    neural_network_architecture.setValues({inputLayerSize,hiddenLayerSize,outputLayerSize});
    neuralnetwork = NeuralNetwork(NeuralNetwork::Approximation,neural_network_architecture);     
}
catch(...) {
    cerr << "Failed to initialize Neural Network" << endl;
    return false;
}


try {
    dataset = DataSet(filedata,';',true);
}
catch(...) {
    cerr << "Can not read Feature File" << endl;
  return false;
}
if (dataset.get_input_variables_number() != inputLayerSize) {
    cerr << "Wrong size of input layer" << endl;
    return false;
}

if (dataset.get_target_variables_number() != outputLayerSize) {
    cerr << "Wrong size of output layer" << endl;
    return false;
}

//prepare Dataset
//get the information of the variables,such as names and statistical descriptives
Tensor<string,1> inputs_names = dataset.get_input_variables_names();
Tensor<string,1> targets_names = dataset.get_target_variables_names();

//instances are divided into a training,a selection and a testing subsets
dataset.split_samples_random();

//get the input variables number and target variables number
Index input_variables_number = dataset.get_input_variables_number();
Index target_variables_number = dataset.get_target_variables_number();

//scale the data set with the minimum-maximum scaling method
Tensor<string,1> scaling_inputs_methods(input_variables_number);
scaling_inputs_methods.setConstant("MinimumMaximum");
Tensor<Descriptives,1> inputs_descriptives = dataset.scale_input_variables(scaling_inputs_methods);

Tensor<string,1> scaling_target_methods(target_variables_number);
scaling_target_methods.setConstant("MinimumMaximum");
Tensor<Descriptives,1> targets_descriptives = dataset.scale_target_variables(scaling_target_methods);

//prepare Neural Network

//introduce information in the layers for a more precise calibration
neuralnetwork.set_inputs_names(inputs_names);
neuralnetwork.set_outputs_names(targets_names);
cout << "inputs names: " << inputs_names << endl;
cout << "targets names: " << targets_names << endl;

//add scaling layer to neural network
ScalingLayer* scaling_layer_pointer = neuralnetwork.get_scaling_layer_pointer(); //Program crashes here
scaling_layer_pointer->set_scaling_methods(ScalingLayer::MinimumMaximum);
scaling_layer_pointer->set_descriptives(inputs_descriptives);

//add the unscaling layer to neural network
UnscalingLayer* unscaling_layer_pointer = neuralnetwork.get_unscaling_layer_pointer();
unscaling_layer_pointer->set_unscaling_methods(UnscalingLayer::MinimumMaximum);
unscaling_layer_pointer->set_descriptives(targets_descriptives);

return true;
}

如您所见,我有一个名为 NNetwork 的类,其构造如下(头文件):

using namespace OpenNN;
using namespace Eigen;
namespace covid {
class NNetwork {
public:
    explicit NNetwork();
    ~NNetwork() = default;
    bool preparationForTraining(const string& filedata);
    bool training();
    bool testing();
    bool predict(const string &filedata,std::vector<double> &prediction);
    bool loadNN();
private:
    OpenNN::NeuralNetwork neuralnetwork;
    OpenNN::DataSet dataset;
};
}

当我删除函数 prepareForTraining 中的最后 6 行代码时,程序会继续直到函数训练中发生下一次崩溃,该函数在 prepareForTraining 之后立即调用:

bool NNetwork::training() {
    //set the training strategy,which is composed by Loss index and Optimization algorithm
    // Training strategy object
    TrainingStrategy training_strategy(&neuralnetwork,&dataset); //Program crashes here next
    training_strategy.set_loss_method(TrainingStrategy::NORMALIZED_SQUARED_ERROR);
    training_strategy.set_optimization_method(TrainingStrategy::ADAPTIVE_MOMENT_ESTIMATION);

    // optimization
    AdaptiveMomentEstimation* adam = training_strategy.get_adaptive_moment_estimation_pointer();
    adam->set_loss_goal(1.0e-3);
    adam->set_maximum_epochs_number(10000);
    adam->set_display_period(1000);

    try {
        // start the training process
        const OptimizationAlgorithm::Results optimization_algorithm_results = training_strategy.perform_training();
        optimization_algorithm_results.save("E:/vitalib/vitalib/optimization_algorithm_results.dat");
    }
    catch(...) {
        return false;
    }
    return true;
}

我感觉我错过了一些东西,可能是关键的代码行或类似的东西。如果有 OpenNN 经验的人可以帮助我,那就太好了。

更新:我将整个代码从函数prepareForTraining 移到main 中,现在程序没有崩溃。但这不是我要找的,因为我宁愿在函数中做。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)&gt; insert overwrite table dwd_trade_cart_add_inc &gt; select data.id, &gt; data.user_id, &gt; data.course_id, &gt; date_format(
错误1 hive (edu)&gt; insert into huanhuan values(1,&#39;haoge&#39;); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive&gt; show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 &lt;configuration&gt; &lt;property&gt; &lt;name&gt;yarn.nodemanager.res