构建复杂的应用程序(一)—— matlab

代码是在机器理解的同时,给人看的,注释更是给看代码的人看的,当然看代码的人,包括 code review 的同一项目组成员,也包括第二天(写完这段代码)后的自己。你那些不符合常规的变量命名,古怪的语句,最终害人害己。

注释

%%====================================================================== %% STEP 1: Initialization
%  Here we initialize some parameters used for the exercise.

...

%%====================================================================== %% STEP 2: Sample patches

... 

%%====================================================================== %% STEP 3: Iterative optimization

主程序

clc; close all; clear all;

内部辅助函数

不知道这一概念如何表达,就是在一个定义了函数的 .m 文件的内部,也定义着其他函数(称为内部辅助函数)。

  • (1)首先一点这一内部函数外界不可见,仅可被该.m文件使用
  • (2)既然外部不可见,则该内部辅助函数的全部意义正在于,简化代码结构,将一定的代码片段提取出来,作为一个单独的功能模块。

断言并输出错误信息

if exist('groupMatrix', 'var'),
    assert(size(groupMatrix, 2) == numFeats, 'groupMatrix has bad dimension');
end

options

当一个函数的参数(尤其是超参 lambda、beta、gamma、epsilon)过多时,可以考虑将它们封装一个名为options的结构体,以实现函数接口形式上的简化。

把 .m 文件置于不同的子文件夹(sub-directory)下

不同的子文件夹其实也意味着不同的功能模块;

  1. data
  2. figs
  3. utilities
  4. misc

参数的组织

autoenc1 = trainAutoencoder(xTrainImages,hiddenSize1, ...
    'MaxEpochs',400, ...
    'L2WeightRegularization',0.004, ...
    'SparsityRegularization',4, ...
    'SparsityProportion',0.15, ...
    'ScaleData', false);

你可能感兴趣的:(构建复杂的应用程序(一)—— matlab)