/// <summary> /// For each block, check whether all hidden dimensions in hiddenList are the same (except for 0). /// If all hidden dimensions in one block are 0, it will be set to the last hidden dimension /// (if exists) or the maximum hidden dimension (if not exist). /// </summary> /// <returns>The list of hidden dimensions in blocks.</returns> private List <int> CheckBlockHiddenSize(int blockPerLayer) { var hiddenSizePerBlock = new List <int>(); for (var i = 0; i < DistillBlocks; ++i) { var hiddenSizesPerBlock = Enumerable.Range(i * blockPerLayer, blockPerLayer) .Select(j => SearchSpace.ArchHiddenSize[DiscreteArches[j]]).ToArray(); var nextHiddenSize = SearchSpace.CheckHiddenDimensionsAndReturnMax(hiddenSizesPerBlock); if (nextHiddenSize == 0) { if (hiddenSizePerBlock.Count == 0) { nextHiddenSize = SearchSpace.ArchHiddenSize[SearchSpace.ArchHiddenSize.Length - 1]; } else { nextHiddenSize = hiddenSizePerBlock[hiddenSizePerBlock.Count - 1]; } } hiddenSizePerBlock.Add(nextHiddenSize); } return(hiddenSizePerBlock); }