nnetbin/sat-nnet-train-frmshuff.cc注解3

进行数据混合

  1. 做数据混合的前提是(!crossvalidate && randomize)
  • 构造mask
```C++
const std::vector& mask = randomizer_mask.Generate(feature_randomizer.NumFrames());
a.声明randomizer_mask对象
NnetRandomizerOptions rnd_opts;
NnetRandomizerOptions为struct且其中有三个成员变量:randomizer_size规定randomizer存的帧数;
                       randomizer_seed为随机数种子;minibatch_size为一次nnet前向的输入帧数
RandomizerMask randomizer_mask(rnd_opts);
定义:
RandomizerMask( const NnetDataRandomizerOptions &conf) { Init(conf); }
void Init(const NnetDataRandomizerOptions& conf) { srand(conf.randomizer_seed); }
这一步init用随机种子触发随机数发生器,为random_shuffle准备。
b.产生mask序列
const std::vector& RandomizerMask::Generate(int32 mask_size) {
    mask_.resize(mask_size);
    for (int32 i=0; i
  • 随机化(Randomize()函数)
    将数序输入放入data_aux_中;将mask拷贝到CuArray中;cu::Randomize(data_aux_, mask_in_gpu, &data_)将data_aux_中顺序数据,按mask_in_gpu放入data_中,mask_in_gpu相当于index.

你可能感兴趣的:(nnetbin/sat-nnet-train-frmshuff.cc注解3)