Learning Javascript OOP II

  1. 作用域、嵌套函数和闭包
    1. 真正的私有方法和属性:在Javascript中,只有函数才有作用域 。也就是说,在一个函数内部声明的变量在函数外问无法访问。但是定义在这个函数中的变量可以被内嵌在这个函数中的内嵌函数 。所以这样就可以达到私有方法和属性的效果.
      function foo() {
         var i = 2;
      
         // private function
         function bar() {
            i *= 2;
         }
      
         bar();
         return i;
      }
      
      以及
      
      function foo() {
         var i = 2;
      
         // private function
         function bar() {
            i *= 2;
            return i;
         }
      
         return bar();
      }
      var baz = foo(); // baz is now a reference to function bar.
      baz(); // returns 4
      baz(); // returns 8
      baz(); // returns 16
      
      var blat = foo(); // blat is another reference to bar.
      blat(); // return 4
       

  2. 什么时候应该在构造函数里定义方法(特权方法Privileged methods):
    var Persion = function(name, age) {
       var name;
       
       this.setName(nameParam) {
          name = nameParam;
       }
    }
     什么时候应该用prototype方式定义方法:
    var Person = function(name, age) {
       var name;
       var age;
    
       this.getName() {
          return name;
       }
    
       this.getAge() {
          return age;
       }
    
    };
    
    Person.prototype = function() {
       toString : function() {
          return this.getName() + " is " + this.getAge() + " years old."
       }
    }
      prototype定义的方法没法访问到私有变量和方法, 而且prototype定义的方法在内存中只存在一份,而特权方法Privileged methods会在创建多个实例后在内存中存在多份,从而会降低性能。另外私有属性和方法不能被子类重用,所以当要在子类重用方法或属性时,对方法和属性的作用域限制就不能用闭包来实现了。
  3. 一个完整的JS类的例子(采闭包方式实现)
    var Person = (function(){
       
       // const variable(This variable won't be changed, so it's final.)
       var EIGHTEEN = 18;
    
       // private static variable
       var personCount = 0;
    
       // private static method
       function isAdult(age) {
          return age >= EIGHTEEN ? true : false;
       }
    
       // constructor
       return function(nameParam, ageParam) {
          // private instance variable
          var name, age;
    
          // public instance method(Privileged method)
          this.setName = function(nameParam) {
             name = nameParam;
          };
          this.getName = function() {
             return name;
          };
          this.setAge = function(ageParam) {
             if (isAdult(ageParam)) {
                age = ageParam;
             }
             age = EIGHTEEN;
          };
          this.getAge = function() {
             return age;
          };
    
          // init properties or do some about initializing work
          personCount++;
    
          this.setName(nameParam);
          this.setAge(ageParam);
       }
    })();
    
    // public static method for Person class
    Person.doSomething = function() {
       //TODO......
    };
    
    // Create Person instance
    Person handy_wang = new Person("handy.wang", 18);
    handy_wang.setName("Wang-Jiangshan");
    handy_wang.setAge(24);
    Person.doSomething();
     
内容概要:本文介绍了基于贝叶斯优化的CNN-LSTM混合神经网络在时间序列预测中的应用,并提供了完整的Matlab代码实现。该模型结合了卷积神经网络(CNN)在特征提取方面的优势与长短期记忆网络(LSTM)在处理时序依赖问题上的强大能力,形成一种高效的混合预测架构。通过贝叶斯优化算法自动调参,提升了模型的预测精度与泛化能力,适用于风电、光伏、负荷、交通流等多种复杂非线性系统的预测任务。文中还展示了模型训练流程、参数优化机制及实际预测效果分析,突出其在科研与工程应用中的实用性。; 适合人群:具备一定机器学习基基于贝叶斯优化CNN-LSTM混合神经网络预测(Matlab代码实现)础和Matlab编程经验的高校研究生、科研人员及从事预测建模的工程技术人员,尤其适合关注深度学习与智能优化算法结合应用的研究者。; 使用场景及目标:①解决各类时间序列预测问题,如能源出力预测、电力负荷预测、环境数据预测等;②学习如何将CNN-LSTM模型与贝叶斯优化相结合,提升模型性能;③掌握Matlab环境下深度学习模型搭建与超参数自动优化的技术路线。; 阅读建议:建议读者结合提供的Matlab代码进行实践操作,重点关注贝叶斯优化模块与混合神经网络结构的设计逻辑,通过调整数据集和参数加深对模型工作机制的理解,同时可将其框架迁移至其他预测场景中验证效果。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值